This is Kara’s first pass at looking at the Packet 7 data (with data from 2019-03-18). (Note: PDF printed portrait, 80% zoom, minimum margins.)

Confirmatory hypotheses (as specified in preregistration)

NOTE: I included all participants, even if they failed attention checks, since we did not specify that we would exclude participants in the preregistration. At some point we should try running everything on the subset of participants who passed all attention checks just so that we know, but this decreases our sample sizes pretty dramatically.

ALSO NOTE: I included only the second sample of Ghanaian participants, who were recruited according to our standards and as specified in the preregistration. For the most part, all results are the same when including the full, “double” sample of Ghanaian participants.

ALSO NOTE: In Thailand this packet was missing one question on the Porosity (Dulin) scale. I have rescaled Thai participants’ Porosity scores to run from 0-32 in order to match the other sites.

Hypothesis #1

Hypothesis #1: People who score higher on the Tellegen Absorption Scale (Tellegen & Atkinson, 1974) also report more spiritual experiences.

Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using absorption scores to predict reports of spiritual experiences, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ absorption * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). Our prediction is that the main effect of absorption on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)

If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ absorption * scale + (1 | site/subject)."

Here are our results:

parameter b standard error df t p significant
(Intercept) 0.03 0.03 495 1.12 0.263
abs 0.21 0.03 495 6.55 <0.001 *
p7_ctry1 -0.32 0.06 495 -5.44 <0.001 *
p7_ctry2 0.79 0.06 495 13.58 <0.001 *
p7_ctry3 -0.11 0.06 495 -1.78 0.075
p7_ctry4 -0.95 0.06 495 -15.26 <0.001 *
scale1 0.00 0.02 495 -0.17 0.863
abs:p7_ctry1 0.04 0.05 495 0.72 0.474
abs:p7_ctry2 -0.01 0.07 495 -0.18 0.86
abs:p7_ctry3 0.12 0.07 495 1.79 0.073
abs:p7_ctry4 -0.04 0.07 495 -0.60 0.551
abs:scale1 -0.03 0.02 495 -1.52 0.129
p7_ctry1:scale1 -0.06 0.03 495 -1.86 0.064
p7_ctry2:scale1 0.04 0.03 495 1.14 0.255
p7_ctry3:scale1 0.07 0.04 495 1.99 0.047 *
p7_ctry4:scale1 -0.18 0.04 495 -4.90 <0.001 *
abs:p7_ctry1:scale1 -0.03 0.03 495 -0.88 0.381
abs:p7_ctry2:scale1 -0.03 0.04 495 -0.68 0.499
abs:p7_ctry3:scale1 0.00 0.04 495 -0.01 0.992
abs:p7_ctry4:scale1 0.04 0.04 495 0.87 0.387

We found evidence in favor of Hypothesis #1: As predicted, the main effect of absorption was significantly positive (see bolded row in table above).

For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.21 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 3.46 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.16 points on the Spiritual Events scale (range: 0-80).

Hypothesis #2

Hypothesis #2: People who score higher on our two porosity indices also report more spiritual experiences.

Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using porosity scores (from each of our two indices) to predict reports of spiritual experiences across the 2 spiritual experience scales included in our survey packet, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ porosity * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). We will run two versions of this model, one using each of the two “porosity” measures described above. For each regression, our prediction is that the main effect of porosity on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)

If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ porosity * scale + (1 | site/subject)."

Here are our results, using the Porosity scale (Dulin):

parameter b standard error df t p significant
(Intercept) 0.07 0.04 495 1.79 0.074
por 0.37 0.04 495 10.19 <0.001 *
p7_ctry1 -0.18 0.06 495 -2.97 0.003 *
p7_ctry2 0.59 0.07 495 8.75 <0.001 *
p7_ctry3 -0.20 0.06 495 -3.38 <0.001 *
p7_ctry4 -0.58 0.08 495 -7.16 <0.001 *
scale1 0.01 0.02 495 0.40 0.687
por:p7_ctry1 0.20 0.06 495 3.34 <0.001 *
por:p7_ctry2 -0.07 0.06 495 -1.10 0.274
por:p7_ctry3 -0.02 0.07 495 -0.23 0.816
por:p7_ctry4 0.05 0.08 495 0.60 0.548
por:scale1 0.00 0.02 495 0.14 0.888
p7_ctry1:scale1 -0.08 0.04 495 -2.08 0.038 *
p7_ctry2:scale1 0.10 0.04 495 2.43 0.015 *
p7_ctry3:scale1 0.07 0.04 495 1.94 0.052
p7_ctry4:scale1 -0.12 0.05 495 -2.34 0.019 *
por:p7_ctry1:scale1 -0.03 0.04 495 -0.75 0.453
por:p7_ctry2:scale1 -0.14 0.04 495 -3.31 0.001 *
por:p7_ctry3:scale1 -0.01 0.04 495 -0.16 0.875
por:p7_ctry4:scale1 0.08 0.05 495 1.62 0.105

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
(Intercept) 0.06 0.03 495 1.94 0.053
mm 0.26 0.03 495 7.60 <0.001 *
p7_ctry1 -0.18 0.06 495 -2.95 0.003 *
p7_ctry2 0.66 0.06 495 10.31 <0.001 *
p7_ctry3 -0.26 0.06 495 -4.58 <0.001 *
p7_ctry4 -0.75 0.07 495 -10.67 <0.001 *
scale1 0.01 0.02 495 0.39 0.693
mm:p7_ctry1 0.20 0.06 495 3.57 <0.001 *
mm:p7_ctry2 -0.07 0.06 495 -1.20 0.23
mm:p7_ctry3 -0.01 0.06 495 -0.14 0.888
mm:p7_ctry4 0.05 0.08 495 0.64 0.521
mm:scale1 -0.04 0.02 495 -2.14 0.033 *
p7_ctry1:scale1 -0.11 0.04 495 -3.11 0.002 *
p7_ctry2:scale1 0.10 0.04 495 2.66 0.008 *
p7_ctry3:scale1 0.07 0.03 495 2.10 0.036 *
p7_ctry4:scale1 -0.17 0.04 495 -3.96 <0.001 *
mm:p7_ctry1:scale1 -0.06 0.03 495 -1.83 0.068
mm:p7_ctry2:scale1 -0.09 0.04 495 -2.48 0.014 *
mm:p7_ctry3:scale1 0.01 0.04 495 0.28 0.778
mm:p7_ctry4:scale1 0.08 0.05 495 1.60 0.111

In both cases, we found evidence in favor of Hypothesis #2: As predicted, the main effect of porosity was significantly positive in both regression analyses (see bolded rows in tables above).

For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.37 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.48 points on the Porosity scale (range: 0-32), participants (on average) increased by 6.26 points on the Daily Spiritual Experiences scale (range: 0-70) or 5.73 points on the Spiritual Events scale (range: 0-80).

For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.26 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 4.36 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.99 points on the Spiritual Events scale (range: 0-80).

Hypothesis #3

Hypothesis #3: The positive relationship between absorption and experience is statistically significant in each field site individually.

Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #1 to assess the relationship[] between absorption and spiritual experience […] in each field site individually. For Hypothesis #3, our models will take the following form: experience ~ absorption * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”

Here are our results:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.09 100 0.00 1
abs 0.30 0.09 100 3.40 <0.001 *
scale1 0.00 0.04 100 0.00 1
abs:scale1 -0.06 0.04 100 -1.67 0.097
Ghana
(Intercept) 0.00 0.08 98 0.00 1
abs 0.20 0.08 98 2.42 0.017 *
scale1 0.00 0.06 98 0.00 1
abs:scale1 0.00 0.06 98 -0.06 0.955
Thailand
(Intercept) 0.00 0.07 109 0.00 1
abs 0.40 0.08 109 5.31 <0.001 *
scale1 0.00 0.04 109 0.00 1
abs:scale1 -0.03 0.05 109 -0.61 0.546
China
(Intercept) 0.00 0.09 98 0.00 1
abs 0.26 0.09 98 3.00 0.003 *
scale1 0.00 0.04 98 0.00 1
abs:scale1 -0.02 0.04 98 -0.41 0.684
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
abs 0.15 0.08 90 1.74 0.085
scale1 0.00 0.06 90 0.00 1
abs:scale1 0.01 0.06 90 0.14 0.892

We found evidence in favor of Hypothesis #3 in all sites except Vanuatu: As predicted, the main effect of absorption was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (although some would consider the effect “marginally significant”; see bolded rows in table above).

(See other relevant plots under “Hypothesis #1,” above.)

Hypothesis #4

Hypothesis #4: The positive relationship between absorption and experience is statistically significant in each field site individually.

Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #2 to assess the relationship[…] between porosity and experience in each field site individually. […] For Hypothesis #4, our models will take the following form: experience ~ porosity * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”

Here are our results, using the Porosity scale (Dulin):

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
por 0.54 0.07 100 7.30 <0.001 *
scale1 0.00 0.04 100 0.00 1
por:scale1 -0.02 0.04 100 -0.49 0.628
Ghana
(Intercept) 0.00 0.08 98 0.00 1
por 0.29 0.08 98 3.64 <0.001 *
scale1 0.00 0.06 98 0.00 1
por:scale1 -0.06 0.06 98 -1.04 0.303
Thailand
(Intercept) 0.00 0.07 109 0.00 1
por 0.41 0.07 109 5.52 <0.001 *
scale1 0.00 0.05 109 0.00 1
por:scale1 0.00 0.05 109 0.10 0.917
China
(Intercept) 0.00 0.07 98 0.00 1
por 0.54 0.07 98 7.34 <0.001 *
scale1 0.00 0.04 98 0.00 1
por:scale1 0.05 0.04 98 1.14 0.257
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
por 0.19 0.08 90 2.25 0.027 *
scale1 0.00 0.06 90 0.00 1
por:scale1 0.11 0.06 90 1.83 0.07

Using the Porosity scale, We found evidence in favor of Hypothesis #4 in all sites: As predicted, the main effect of porosity was significantly positive in the US, Ghana, Thailand, China, and Vanuatu (see bolded rows in table above).

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.08 100 0.00 1
mm 0.49 0.08 100 6.36 <0.001 *
scale1 0.00 0.04 100 0.00 1
mm:scale1 -0.11 0.04 100 -2.93 0.004 *
Ghana
(Intercept) 0.00 0.08 98 0.00 1
mm 0.20 0.08 98 2.42 0.017 *
scale1 0.00 0.06 98 0.00 1
mm:scale1 -0.10 0.06 98 -1.88 0.062
Thailand
(Intercept) 0.00 0.08 109 0.00 1
mm 0.33 0.08 109 4.17 <0.001 *
scale1 0.00 0.04 109 0.00 1
mm:scale1 -0.04 0.05 109 -0.83 0.411
China
(Intercept) 0.00 0.08 98 0.00 1
mm 0.38 0.08 98 4.68 <0.001 *
scale1 0.00 0.04 98 0.00 1
mm:scale1 0.00 0.04 98 0.04 0.968
Vanuatu
(Intercept) 0.00 0.09 90 0.00 1
mm 0.09 0.09 90 1.07 0.288
scale1 0.00 0.06 90 0.00 1
mm:scale1 0.03 0.06 90 0.48 0.632

Using the Martha Story scale, We found evidence in favor of Hypothesis #4 in all sites except Vanuatu: As predicted, the main effect of Martha Story was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (see bolded rows in table above).

(See other relevant plots under “Hypothesis #2,” above.)

Secondary exploratory analyses

“Secular” experiences

From preregistration: “First, in order to explore the question of whether affirmation of spiritual experience, porosity and absorption are simply due to the religiosity of participants, we will conduct additional analyses focusing on the two “secular” experience scales (the revised Launay Slade scale, Morrison, Wells and Nothard 2000]; and the Sheep-Goat [paranormal] scale, Thalborne & Delin, 1993). These analyses will be identical to the primary analyses outlined above, except that they will only include these two “secular experience” scales and not the two spiritual experience scales. We consider these to be exploratory analyses.”

Parallel to Hypothesis #1

parameter b standard error df t p significant
(Intercept) 0.01 0.03 495 0.34 0.731
abs 0.36 0.03 495 10.70 <0.001 *
p7_ctry1 0.14 0.06 495 2.26 0.025 *
p7_ctry2 0.24 0.06 495 3.74 <0.001 *
p7_ctry3 -0.05 0.07 495 -0.74 0.457
p7_ctry4 -0.23 0.07 495 -3.44 <0.001 *
scale1 0.00 0.03 495 0.06 0.949
abs:p7_ctry1 0.10 0.06 495 1.83 0.068
abs:p7_ctry2 -0.05 0.07 495 -0.75 0.451
abs:p7_ctry3 0.06 0.07 495 0.79 0.431
abs:p7_ctry4 0.04 0.07 495 0.50 0.617
abs:scale1 -0.01 0.03 495 -0.36 0.722
p7_ctry1:scale1 -0.25 0.05 495 -4.79 <0.001 *
p7_ctry2:scale1 -0.09 0.05 495 -1.62 0.107
p7_ctry3:scale1 0.19 0.06 495 3.37 <0.001 *
p7_ctry4:scale1 0.08 0.06 495 1.41 0.16
abs:p7_ctry1:scale1 0.00 0.05 495 0.00 0.999
abs:p7_ctry2:scale1 -0.05 0.06 495 -0.85 0.398
abs:p7_ctry3:scale1 0.04 0.06 495 0.71 0.481
abs:p7_ctry4:scale1 0.01 0.06 495 0.11 0.914

In parallel to Hypothesis #1, the relationship between absorption and secular experience was also significantly positive (see bolded row table above).

For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.36 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 1.16 points on the Uncommon Events scale (range: 0-18) or 0.73 points on the Extrasensory scale (range: 0-7).

This was actually a (numerically) stronger effect than what we documented for spiritual experiences (b = 0.36 vs. b = 0.21). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #2

Here are our results, using the Porosity scale (Dulin):

parameter b standard error df t p significant
(Intercept) 0.10 0.04 495 2.40 0.017 *
por 0.45 0.04 495 10.66 <0.001 *
p7_ctry1 0.24 0.07 495 3.39 <0.001 *
p7_ctry2 0.04 0.08 495 0.57 0.57
p7_ctry3 -0.25 0.07 495 -3.61 <0.001 *
p7_ctry4 0.39 0.09 495 4.16 <0.001 *
scale1 0.10 0.04 495 2.76 0.006 *
por:p7_ctry1 0.24 0.07 495 3.47 <0.001 *
por:p7_ctry2 -0.28 0.07 495 -3.72 <0.001 *
por:p7_ctry3 -0.10 0.08 495 -1.25 0.213
por:p7_ctry4 0.26 0.09 495 2.91 0.004 *
por:scale1 0.14 0.03 495 3.95 <0.001 *
p7_ctry1:scale1 -0.33 0.06 495 -5.73 <0.001 *
p7_ctry2:scale1 -0.19 0.06 495 -3.06 0.002 *
p7_ctry3:scale1 0.14 0.06 495 2.39 0.017 *
p7_ctry4:scale1 0.36 0.08 495 4.69 <0.001 *
por:p7_ctry1:scale1 -0.09 0.06 495 -1.49 0.138
por:p7_ctry2:scale1 -0.12 0.06 495 -1.89 0.059
por:p7_ctry3:scale1 0.07 0.06 495 1.05 0.296
por:p7_ctry4:scale1 0.33 0.07 495 4.50 <0.001 *

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
(Intercept) 0.09 0.04 495 2.53 0.012 *
mm 0.31 0.04 495 7.92 <0.001 *
p7_ctry1 0.27 0.07 495 3.85 <0.001 *
p7_ctry2 0.05 0.07 495 0.65 0.515
p7_ctry3 -0.30 0.06 495 -4.64 <0.001 *
p7_ctry4 0.10 0.08 495 1.29 0.198
scale1 0.05 0.03 495 1.56 0.118
mm:p7_ctry1 0.29 0.06 495 4.48 <0.001 *
mm:p7_ctry2 -0.12 0.07 495 -1.83 0.067
mm:p7_ctry3 -0.08 0.07 495 -1.07 0.284
mm:p7_ctry4 0.22 0.10 495 2.27 0.023 *
mm:scale1 0.06 0.03 495 1.85 0.065
p7_ctry1:scale1 -0.30 0.06 495 -5.29 <0.001 *
p7_ctry2:scale1 -0.08 0.06 495 -1.39 0.165
p7_ctry3:scale1 0.15 0.05 495 2.80 0.005 *
p7_ctry4:scale1 0.19 0.07 495 2.93 0.004 *
mm:p7_ctry1:scale1 -0.06 0.05 495 -1.09 0.276
mm:p7_ctry2:scale1 -0.15 0.05 495 -2.69 0.007 *
mm:p7_ctry3:scale1 0.05 0.06 495 0.92 0.356
mm:p7_ctry4:scale1 0.24 0.08 495 3.11 0.002 *

In parallel to Hypothesis #2, in both cases, the relationship between porosity and secular experience was significantly positive (see bolded rows in tables above).

For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.45 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.48 points on the Porosity scale (range: 0-32), participants (on average) increased by 1.43 points on the Uncommon Events scale (range: 0-18) or 0.9 points on the Extrasensory scale (range: 0-7).

For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.31 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 0.99 points on the Uncommon Events scale (range: 0-18) or 0.62 points on the Extrasensory scale (range: 0-7).

These were actually (numerically) stronger effects than what we documented for spiritual experiences (Porosity: b = 0.45 vs. b = 0.37; Martha Story: b = 0.31 vs. b = 0.26). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #3

Here are our results:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
abs 0.46 0.07 100 6.50 <0.001 *
scale1 0.00 0.05 100 0.00 1
abs:scale1 0.00 0.05 100 0.09 0.93
Ghana
(Intercept) 0.00 0.07 98 0.00 1
abs 0.28 0.07 98 4.02 <0.001 *
scale1 0.00 0.07 98 0.00 1
abs:scale1 -0.04 0.07 98 -0.55 0.583
Thailand
(Intercept) 0.00 0.07 109 0.00 1
abs 0.41 0.07 109 6.03 <0.001 *
scale1 0.00 0.06 109 0.00 1
abs:scale1 0.02 0.06 109 0.40 0.693
China
(Intercept) 0.00 0.07 98 0.00 1
abs 0.36 0.07 98 5.12 <0.001 *
scale1 0.00 0.06 98 0.00 1
abs:scale1 -0.07 0.06 98 -1.13 0.263
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
abs 0.27 0.08 90 3.37 0.001 *
scale1 0.00 0.06 90 0.00 1
abs:scale1 -0.02 0.06 90 -0.37 0.709

In parallel to Hypothesis #3, the relationship between absorption and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #1,” above.)

Parallel to Hypothesis #4

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
por 0.53 0.07 100 8.03 <0.001 *
scale1 0.00 0.05 100 0.00 1
por:scale1 0.06 0.05 100 1.07 0.286
Ghana
(Intercept) 0.00 0.07 98 0.00 1
por 0.15 0.07 98 2.10 0.038 *
scale1 0.00 0.07 98 0.00 1
por:scale1 0.03 0.07 98 0.41 0.685
Thailand
(Intercept) 0.00 0.07 109 0.00 1
por 0.32 0.07 109 4.37 <0.001 *
scale1 0.00 0.05 109 0.00 1
por:scale1 0.18 0.05 109 3.37 0.001 *
China
(Intercept) 0.00 0.06 98 0.00 1
por 0.46 0.06 98 7.13 <0.001 *
scale1 0.00 0.06 98 0.00 1
por:scale1 0.25 0.06 98 4.31 <0.001 *
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
por 0.23 0.08 90 2.80 0.006 *
scale1 0.00 0.06 90 0.00 1
por:scale1 -0.05 0.06 90 -0.87 0.384

In parallel to Hypothesis #4, using the Porosity (Dulin) scale, the relationship between porosity and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

And here are our results, using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 100 0.00 1
mm 0.52 0.07 100 7.82 <0.001 *
scale1 0.00 0.05 100 0.00 1
mm:scale1 0.02 0.05 100 0.35 0.726
Ghana
(Intercept) 0.00 0.07 98 0.00 1
mm 0.19 0.07 98 2.66 0.009 *
scale1 0.00 0.07 98 0.00 1
mm:scale1 -0.08 0.07 98 -1.18 0.242
Thailand
(Intercept) 0.00 0.07 109 0.00 1
mm 0.24 0.07 109 3.16 0.002 *
scale1 0.00 0.05 109 0.00 1
mm:scale1 0.11 0.05 109 2.02 0.046 *
China
(Intercept) 0.00 0.07 98 0.00 1
mm 0.33 0.07 98 4.58 <0.001 *
scale1 0.00 0.06 98 0.00 1
mm:scale1 0.14 0.06 98 2.30 0.024 *
Vanuatu
(Intercept) 0.00 0.08 90 0.00 1
mm 0.01 0.08 90 0.06 0.95
scale1 0.00 0.06 90 0.00 1
mm:scale1 -0.03 0.06 90 -0.47 0.636

In parallel to Hypothesis #4, using the Martha Story scale, the relationship between porosity and secular experience was significantly positive in all sites except Vanuatu (where the relationship with spiritual experience was also not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #2,” above.)

“Control” scales (Hypothesis #5)

From preregistration: “Second, in order to examine whether the hypothesized relationships between absorption and experience and between porosity and experience can be explained by a lower-level processes—namely, individual or cross-cultural differences in an overall tendency to agree with the questions posed by these scales (i.e., a “yes” bias), we will also examine the relationships between the two “control” scales (the Sense of Control scale, Lachman & Weaver, 1998; and the Need for Cognition scale, Cacioppo, Petty, & Kao, 1993) and our measures of absorption, porosity, and experience. This provides something of a negative control for our primary hypotheses. Our prediction is that any relationships with these control measures will be weaker than the relationships among absorption, porosity, and experience. To assess this, we will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using scores on absorption, porosity, and control scales to predict reports of spiritual experiences. Using the “stats” package for R, we will specify this model as follows: experience ~ score * predictor * site + (1 | subject), where “site” is a categorical variable comparing the five field sites (effect-coded), and—critically—“predictor” is a categorical variable with the following orthogonal contrasts: (1) Scales of interest (absorption and the two porosity measures) vs. control scales; (2) absorption vs. porosity measures; (3) porosity as indexed by the Dulin scale vs. porosity as indexed by the Mental Causation scale; (4) Need for Cognition vs. Need for Control (Mastery Subscale). Because of the unusual and complex formulation of this model—considering each of these 5 “predictors” as repeated observations of the variable “score”—we will conduct separate models for the two spiritual experience scales (Daily Spiritual Experiences and Spiritual Events), rather than incorporating both spiritual experiences measures into the same model (as in Hypotheses #1-4). As in Hypotheses #1-4, if we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ score * predictor + (1 | site/subject). We consider these to be confirmatory tests, and in each case our prediction is that the two-way interaction between “score” and the first orthogonal contrast on “predictor” (comparing the predictive power of our scales of interest vs. our two control scales) will be significantly positive (b > 0, t > 2, p < 0.05).”

Although we did not number this hypothesis in the preregistration, I’m going to go ahead and call it Hypothesis #5.

NOTE: Neither of the models we specified in the preregistration were able to run. I think this is due to an error in my thinking (about which of our measures were “repeated measures”). The models reported here are very close to what we preregistered.

Here are our results using the Daily Spiritual Experiences scale:

parameter b standard error t p significant
(Intercept) 0.03 0.02 1.95 0.052
score 0.17 0.02 9.58 <0.001 *
predictorint_ctl 0.01 0.01 1.97 0.049 *
predictorabs_pmm -0.01 0.01 -1.01 0.311
predictorpor_mm 0.00 0.03 0.11 0.913
predictorhthk_wob 0.03 0.03 0.95 0.343
p7_ctry1 -0.37 0.03 -11.99 <0.001 *
p7_ctry2 0.79 0.03 25.31 <0.001 *
p7_ctry3 -0.12 0.03 -3.41 <0.001 *
p7_ctry4 -0.96 0.03 -28.53 <0.001 *
score:predictorint_ctl 0.04 0.01 5.54 <0.001 *
score:predictorabs_pmm -0.04 0.01 -2.71 0.007 *
score:predictorpor_mm 0.08 0.03 2.86 0.004 *
score:predictorhthk_wob 0.02 0.03 0.72 0.473
score:p7_ctry1 0.11 0.03 3.67 <0.001 *
score:p7_ctry2 -0.06 0.03 -1.75 0.08
score:p7_ctry3 0.02 0.04 0.50 0.616
score:p7_ctry4 0.02 0.04 0.56 0.579
predictorint_ctl:p7_ctry1 0.03 0.01 2.18 0.03 *
predictorabs_pmm:p7_ctry1 -0.03 0.03 -1.32 0.187
predictorpor_mm:p7_ctry1 0.01 0.05 0.30 0.761
predictorhthk_wob:p7_ctry1 0.02 0.05 0.38 0.7
predictorint_ctl:p7_ctry2 -0.01 0.01 -1.02 0.306
predictorabs_pmm:p7_ctry2 0.04 0.03 1.33 0.183
predictorpor_mm:p7_ctry2 -0.04 0.05 -0.68 0.499
predictorhthk_wob:p7_ctry2 0.01 0.05 0.30 0.763
predictorint_ctl:p7_ctry3 0.00 0.02 0.07 0.941
predictorabs_pmm:p7_ctry3 0.04 0.03 1.48 0.139
predictorpor_mm:p7_ctry3 0.03 0.05 0.64 0.524
predictorhthk_wob:p7_ctry3 0.01 0.07 0.14 0.885
predictorint_ctl:p7_ctry4 0.02 0.01 1.48 0.139
predictorabs_pmm:p7_ctry4 -0.10 0.03 -3.50 <0.001 *
predictorpor_mm:p7_ctry4 0.11 0.06 1.78 0.075
predictorhthk_wob:p7_ctry4 -0.04 0.05 -0.91 0.361
score:predictorint_ctl:p7_ctry1 0.00 0.01 0.08 0.937
score:predictorabs_pmm:p7_ctry1 -0.05 0.02 -2.03 0.042 *
score:predictorpor_mm:p7_ctry1 0.02 0.05 0.39 0.693
score:predictorhthk_wob:p7_ctry1 -0.07 0.05 -1.46 0.145
score:predictorint_ctl:p7_ctry2 -0.04 0.01 -3.08 0.002 *
score:predictorabs_pmm:p7_ctry2 0.05 0.03 1.72 0.085
score:predictorpor_mm:p7_ctry2 -0.03 0.05 -0.52 0.604
score:predictorhthk_wob:p7_ctry2 -0.08 0.05 -1.64 0.101
score:predictorint_ctl:p7_ctry3 0.01 0.01 0.48 0.63
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.47 0.141
score:predictorpor_mm:p7_ctry3 -0.01 0.05 -0.24 0.813
score:predictorhthk_wob:p7_ctry3 0.04 0.06 0.59 0.558
score:predictorint_ctl:p7_ctry4 0.03 0.02 2.15 0.031 *
score:predictorabs_pmm:p7_ctry4 -0.05 0.03 -1.41 0.159
score:predictorpor_mm:p7_ctry4 0.00 0.06 -0.05 0.964
score:predictorhthk_wob:p7_ctry4 0.05 0.06 0.81 0.419

And here are our results using the Spiritual Events scale:

parameter b standard error t p significant
(Intercept) 0.05 0.02 2.55 0.011 *
score 0.18 0.02 8.66 <0.001 *
predictorint_ctl 0.00 0.01 -0.03 0.972
predictorabs_pmm -0.01 0.02 -0.38 0.701
predictorpor_mm 0.00 0.03 0.03 0.972
predictorhthk_wob -0.02 0.03 -0.57 0.57
p7_ctry1 -0.20 0.04 -5.55 <0.001 *
p7_ctry2 0.67 0.04 18.22 <0.001 *
p7_ctry3 -0.26 0.04 -6.36 <0.001 *
p7_ctry4 -0.64 0.04 -16.12 <0.001 *
score:predictorint_ctl 0.06 0.01 6.60 <0.001 *
score:predictorabs_pmm -0.03 0.02 -1.99 0.047 *
score:predictorpor_mm 0.03 0.03 0.98 0.329
score:predictorhthk_wob 0.08 0.04 2.29 0.022 *
score:p7_ctry1 0.12 0.03 3.45 <0.001 *
score:p7_ctry2 -0.02 0.04 -0.57 0.565
score:p7_ctry3 0.07 0.04 1.65 0.1
score:p7_ctry4 -0.06 0.04 -1.35 0.177
predictorint_ctl:p7_ctry1 0.03 0.02 2.10 0.036 *
predictorabs_pmm:p7_ctry1 -0.06 0.03 -1.84 0.066
predictorpor_mm:p7_ctry1 -0.02 0.06 -0.32 0.75
predictorhthk_wob:p7_ctry1 0.00 0.06 -0.06 0.952
predictorint_ctl:p7_ctry2 -0.04 0.01 -2.51 0.012 *
predictorabs_pmm:p7_ctry2 0.08 0.03 2.47 0.014 *
predictorpor_mm:p7_ctry2 -0.04 0.06 -0.59 0.554
predictorhthk_wob:p7_ctry2 -0.03 0.06 -0.47 0.641
predictorint_ctl:p7_ctry3 0.00 0.02 -0.05 0.958
predictorabs_pmm:p7_ctry3 0.04 0.03 1.23 0.219
predictorpor_mm:p7_ctry3 0.03 0.05 0.50 0.618
predictorhthk_wob:p7_ctry3 -0.02 0.08 -0.27 0.786
predictorint_ctl:p7_ctry4 0.02 0.02 1.24 0.215
predictorabs_pmm:p7_ctry4 -0.08 0.04 -2.30 0.022 *
predictorpor_mm:p7_ctry4 0.06 0.07 0.84 0.399
predictorhthk_wob:p7_ctry4 -0.01 0.06 -0.20 0.841
score:predictorint_ctl:p7_ctry1 0.03 0.01 2.46 0.014 *
score:predictorabs_pmm:p7_ctry1 -0.06 0.03 -2.17 0.03 *
score:predictorpor_mm:p7_ctry1 -0.01 0.06 -0.27 0.79
score:predictorhthk_wob:p7_ctry1 -0.04 0.06 -0.78 0.434
score:predictorint_ctl:p7_ctry2 0.03 0.02 1.78 0.075
score:predictorabs_pmm:p7_ctry2 -0.01 0.03 -0.28 0.782
score:predictorpor_mm:p7_ctry2 0.02 0.06 0.42 0.675
score:predictorhthk_wob:p7_ctry2 0.00 0.06 0.06 0.954
score:predictorint_ctl:p7_ctry3 -0.02 0.02 -1.10 0.273
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.29 0.198
score:predictorpor_mm:p7_ctry3 0.01 0.06 0.09 0.931
score:predictorhthk_wob:p7_ctry3 -0.08 0.07 -1.09 0.276
score:predictorint_ctl:p7_ctry4 0.01 0.02 0.37 0.709
score:predictorabs_pmm:p7_ctry4 -0.02 0.04 -0.40 0.691
score:predictorpor_mm:p7_ctry4 0.00 0.08 -0.05 0.963
score:predictorhthk_wob:p7_ctry4 0.02 0.07 0.25 0.805

In both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors.

“Control” scales, without reverse coding

The two control scales are the only scales that have reverse-coded items! This is really too bad, because it means that they are not actually good ways to assess a yes-bias.

In an attempt to remedy this, here I re-scoring these scales after dropping reverse-coded items.

Collapsing across sites

Here are our results using the Daily Spiritual Experiences scale:

parameter b standard error t p significant
(Intercept) 0.03 0.02 1.94 0.052
score 0.18 0.02 10.54 <0.001 *
predictorint_ctl 0.01 0.01 2.16 0.031 *
predictorabs_pmm -0.01 0.01 -1.02 0.31
predictorpor_mm 0.00 0.03 0.11 0.913
predictorhthk_wob 0.02 0.02 0.90 0.37
p7_ctry1 -0.35 0.03 -11.76 <0.001 *
p7_ctry2 0.79 0.03 26.13 <0.001 *
p7_ctry3 -0.10 0.03 -3.44 <0.001 *
p7_ctry4 -0.95 0.03 -28.64 <0.001 *
score:predictorint_ctl 0.04 0.01 5.99 <0.001 *
score:predictorabs_pmm -0.04 0.01 -2.72 0.007 *
score:predictorpor_mm 0.08 0.03 2.86 0.004 *
score:predictorhthk_wob 0.08 0.03 3.14 0.002 *
score:p7_ctry1 0.07 0.03 2.61 0.009 *
score:p7_ctry2 -0.06 0.03 -1.92 0.055
score:p7_ctry3 0.04 0.03 1.23 0.218
score:p7_ctry4 0.01 0.04 0.38 0.701
predictorint_ctl:p7_ctry1 0.02 0.01 1.56 0.119
predictorabs_pmm:p7_ctry1 -0.03 0.03 -1.32 0.186
predictorpor_mm:p7_ctry1 0.01 0.05 0.31 0.76
predictorhthk_wob:p7_ctry1 -0.01 0.05 -0.26 0.795
predictorint_ctl:p7_ctry2 -0.01 0.01 -1.22 0.224
predictorabs_pmm:p7_ctry2 0.04 0.03 1.34 0.182
predictorpor_mm:p7_ctry2 -0.04 0.05 -0.68 0.498
predictorhthk_wob:p7_ctry2 -0.03 0.05 -0.59 0.557
predictorint_ctl:p7_ctry3 -0.01 0.01 -0.62 0.535
predictorabs_pmm:p7_ctry3 0.04 0.03 1.48 0.138
predictorpor_mm:p7_ctry3 0.03 0.05 0.64 0.523
predictorhthk_wob:p7_ctry3 0.03 0.05 0.64 0.525
predictorint_ctl:p7_ctry4 0.02 0.01 1.24 0.215
predictorabs_pmm:p7_ctry4 -0.10 0.03 -3.51 <0.001 *
predictorpor_mm:p7_ctry4 0.11 0.06 1.79 0.074
predictorhthk_wob:p7_ctry4 -0.04 0.05 -0.88 0.378
score:predictorint_ctl:p7_ctry1 0.02 0.01 1.45 0.147
score:predictorabs_pmm:p7_ctry1 -0.05 0.02 -2.04 0.042 *
score:predictorpor_mm:p7_ctry1 0.02 0.05 0.40 0.692
score:predictorhthk_wob:p7_ctry1 -0.12 0.05 -2.55 0.011 *
score:predictorint_ctl:p7_ctry2 -0.04 0.01 -3.34 <0.001 *
score:predictorabs_pmm:p7_ctry2 0.05 0.03 1.73 0.085
score:predictorpor_mm:p7_ctry2 -0.03 0.05 -0.52 0.603
score:predictorhthk_wob:p7_ctry2 -0.05 0.04 -1.18 0.24
score:predictorint_ctl:p7_ctry3 0.00 0.01 -0.29 0.772
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.48 0.14
score:predictorpor_mm:p7_ctry3 -0.01 0.05 -0.24 0.813
score:predictorhthk_wob:p7_ctry3 0.00 0.05 -0.01 0.992
score:predictorint_ctl:p7_ctry4 0.04 0.01 2.43 0.015 *
score:predictorabs_pmm:p7_ctry4 -0.05 0.03 -1.41 0.158
score:predictorpor_mm:p7_ctry4 0.00 0.06 -0.05 0.964
score:predictorhthk_wob:p7_ctry4 0.03 0.06 0.51 0.609

And here are our results using the Spiritual Events scale:

parameter b standard error t p significant
(Intercept) 0.03 0.02 1.54 0.125
score 0.20 0.02 10.08 <0.001 *
predictorint_ctl 0.01 0.01 1.35 0.177
predictorabs_pmm -0.01 0.02 -0.39 0.699
predictorpor_mm 0.00 0.03 0.03 0.972
predictorhthk_wob -0.01 0.03 -0.29 0.771
p7_ctry1 -0.18 0.04 -5.14 <0.001 *
p7_ctry2 0.66 0.04 18.67 <0.001 *
p7_ctry3 -0.26 0.03 -7.46 <0.001 *
p7_ctry4 -0.62 0.04 -15.85 <0.001 *
score:predictorint_ctl 0.05 0.01 6.65 <0.001 *
score:predictorabs_pmm -0.03 0.02 -2.00 0.045 *
score:predictorpor_mm 0.03 0.03 0.99 0.325
score:predictorhthk_wob 0.13 0.03 4.46 <0.001 *
score:p7_ctry1 0.10 0.03 3.11 0.002 *
score:p7_ctry2 0.00 0.03 0.01 0.993
score:p7_ctry3 0.06 0.04 1.62 0.104
score:p7_ctry4 -0.07 0.04 -1.59 0.113
predictorint_ctl:p7_ctry1 0.02 0.01 1.46 0.143
predictorabs_pmm:p7_ctry1 -0.06 0.03 -1.86 0.063
predictorpor_mm:p7_ctry1 -0.02 0.06 -0.32 0.747
predictorhthk_wob:p7_ctry1 -0.04 0.06 -0.73 0.467
predictorint_ctl:p7_ctry2 -0.03 0.01 -2.41 0.016 *
predictorabs_pmm:p7_ctry2 0.08 0.03 2.49 0.013 *
predictorpor_mm:p7_ctry2 -0.04 0.06 -0.60 0.551
predictorhthk_wob:p7_ctry2 -0.04 0.05 -0.69 0.492
predictorint_ctl:p7_ctry3 0.00 0.01 -0.18 0.859
predictorabs_pmm:p7_ctry3 0.04 0.03 1.24 0.215
predictorpor_mm:p7_ctry3 0.03 0.05 0.50 0.615
predictorhthk_wob:p7_ctry3 0.05 0.06 0.85 0.396
predictorint_ctl:p7_ctry4 0.01 0.02 0.56 0.573
predictorabs_pmm:p7_ctry4 -0.08 0.04 -2.32 0.02 *
predictorpor_mm:p7_ctry4 0.06 0.07 0.85 0.394
predictorhthk_wob:p7_ctry4 -0.01 0.05 -0.26 0.796
score:predictorint_ctl:p7_ctry1 0.04 0.01 3.06 0.002 *
score:predictorabs_pmm:p7_ctry1 -0.06 0.03 -2.19 0.029 *
score:predictorpor_mm:p7_ctry1 -0.01 0.05 -0.27 0.788
score:predictorhthk_wob:p7_ctry1 -0.03 0.05 -0.62 0.534
score:predictorint_ctl:p7_ctry2 0.02 0.01 1.20 0.232
score:predictorabs_pmm:p7_ctry2 -0.01 0.03 -0.28 0.781
score:predictorpor_mm:p7_ctry2 0.02 0.06 0.42 0.673
score:predictorhthk_wob:p7_ctry2 0.06 0.05 1.20 0.232
score:predictorint_ctl:p7_ctry3 -0.02 0.02 -1.03 0.304
score:predictorabs_pmm:p7_ctry3 0.04 0.03 1.30 0.194
score:predictorpor_mm:p7_ctry3 0.01 0.06 0.09 0.931
score:predictorhthk_wob:p7_ctry3 -0.11 0.06 -1.80 0.072
score:predictorint_ctl:p7_ctry4 0.01 0.02 0.64 0.522
score:predictorabs_pmm:p7_ctry4 -0.02 0.04 -0.40 0.688
score:predictorpor_mm:p7_ctry4 0.00 0.08 -0.05 0.962
score:predictorhthk_wob:p7_ctry4 -0.04 0.07 -0.64 0.523

Again, in both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors.

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

Here are our results for the Daily Spiritual Experiences scale:

parameter b standard error t p significant
US
(Intercept) -0.01 0.04 -0.16 0.871
score 0.26 0.04 6.06 <0.001 *
predictorint_ctl 0.00 0.02 0.20 0.842
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob -0.01 0.07 -0.20 0.844
score:predictorint_ctl 0.06 0.02 3.44 <0.001 *
score:predictorabs_pmm -0.07 0.04 -1.91 0.057
score:predictorpor_mm 0.07 0.07 1.04 0.298
score:predictorhthk_wob -0.04 0.07 -0.53 0.598
Ghana
(Intercept) -0.01 0.04 -0.21 0.836
score 0.19 0.04 4.18 <0.001 *
predictorint_ctl 0.00 0.02 0.25 0.801
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 0.02 0.984
score:predictorint_ctl -0.01 0.02 -0.39 0.695
score:predictorabs_pmm 0.01 0.04 0.28 0.779
score:predictorpor_mm 0.07 0.07 0.97 0.331
score:predictorhthk_wob 0.07 0.07 0.98 0.326
Thailand
(Intercept) 0.00 0.04 0.00 1
score 0.27 0.04 6.53 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.06 0.00 1
predictorhthk_wob 0.00 0.06 0.00 1
score:predictorint_ctl 0.05 0.02 2.78 0.006 *
score:predictorabs_pmm 0.01 0.04 0.17 0.863
score:predictorpor_mm 0.06 0.06 0.98 0.327
score:predictorhthk_wob 0.10 0.06 1.51 0.132
China
(Intercept) 0.00 0.04 0.00 1
score 0.23 0.04 5.45 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 0.00 1
score:predictorint_ctl 0.09 0.02 5.03 <0.001 *
score:predictorabs_pmm -0.08 0.04 -2.10 0.037 *
score:predictorpor_mm 0.10 0.07 1.49 0.137
score:predictorhthk_wob 0.14 0.07 2.12 0.034 *
Vanuatu
(Intercept) 0.00 0.05 -0.04 0.967
score 0.11 0.05 2.42 0.016 *
predictorint_ctl 0.00 0.02 0.05 0.96
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.01 0.07 0.14 0.893
score:predictorint_ctl 0.04 0.02 2.10 0.036 *
score:predictorabs_pmm -0.02 0.04 -0.42 0.674
score:predictorpor_mm 0.09 0.07 1.22 0.223
score:predictorhthk_wob 0.27 0.07 3.67 <0.001 *

Here are our results for the Daily Spiritual Experiences scale:

parameter b standard error t p significant
US
(Intercept) 0.00 0.04 -0.10 0.919
score 0.31 0.04 7.58 <0.001 *
predictorint_ctl 0.00 0.02 0.12 0.901
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.06 0.00 1
predictorhthk_wob -0.01 0.07 -0.09 0.925
score:predictorint_ctl 0.10 0.02 5.85 <0.001 *
score:predictorabs_pmm -0.07 0.04 -1.98 0.048 *
score:predictorpor_mm -0.02 0.06 -0.33 0.742
score:predictorhthk_wob 0.10 0.07 1.54 0.123
Ghana
(Intercept) -0.01 0.04 -0.23 0.821
score 0.17 0.04 3.92 <0.001 *
predictorint_ctl 0.00 0.02 0.28 0.782
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 -0.04 0.969
score:predictorint_ctl 0.06 0.02 3.09 0.002 *
score:predictorabs_pmm -0.04 0.04 -1.03 0.304
score:predictorpor_mm 0.02 0.07 0.31 0.756
score:predictorhthk_wob 0.20 0.07 2.84 0.005 *
Thailand
(Intercept) 0.00 0.04 0.00 1
score 0.31 0.04 7.64 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.06 0.00 1
predictorhthk_wob 0.00 0.06 0.00 1
score:predictorint_ctl 0.05 0.02 2.74 0.006 *
score:predictorabs_pmm 0.01 0.04 0.37 0.708
score:predictorpor_mm 0.02 0.06 0.34 0.738
score:predictorhthk_wob 0.03 0.06 0.47 0.637
China
(Intercept) 0.00 0.04 0.00 1
score 0.20 0.04 4.59 <0.001 *
predictorint_ctl 0.00 0.02 0.00 1
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.00 0.07 0.00 1
score:predictorint_ctl 0.09 0.02 5.34 <0.001 *
score:predictorabs_pmm -0.05 0.04 -1.33 0.183
score:predictorpor_mm 0.05 0.07 0.77 0.444
score:predictorhthk_wob 0.14 0.07 2.13 0.033 *
Vanuatu
(Intercept) -0.01 0.05 -0.31 0.76
score 0.09 0.05 1.87 0.062
predictorint_ctl 0.01 0.02 0.37 0.709
predictorabs_pmm 0.00 0.04 0.00 1
predictorpor_mm 0.00 0.07 0.00 1
predictorhthk_wob 0.01 0.07 0.19 0.851
score:predictorint_ctl 0.00 0.02 0.22 0.824
score:predictorabs_pmm 0.02 0.04 0.55 0.585
score:predictorpor_mm 0.01 0.07 0.12 0.902
score:predictorhthk_wob 0.23 0.07 3.07 0.002 *

In both cases, we found evidence in favor of Hypothesis #5 in almost all sites: In most sites, as predicted the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded rows in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors. The only exceptions to this were Ghana when using the Daily Spiritual Experiences scale (first table above), and Vanuatu when using the Spiritual Events scale (second table above).

Beyond the preregistration

Combined effects of absorption and porosity on spiritual experiences (absorption controlling for porosity & vice versa)

Collapsing across sites

Here I examine a big model, in which both absorption and porosity together predict spiritual experiences. This allows us to look at the effect of absorption controlling for porosity, the effect of porosity controlling for absorption, and the possibility of an interaction between absorption and porosity. I look at porosity as indexed by the Porosity (Dulin) scale and as indexed by the Martha Story separately, and use both the Daily Spiritual Experience and Spiritual Events scales to index spiritual experience.

Here are our results using the Porosity (Dulin) scale:

parameter b standard error df t p significant
(Intercept) 0.07 0.04 485 1.80 0.073
abs 0.14 0.04 485 3.40 <0.001 *
por 0.32 0.04 485 8.06 <0.001 *
p7_ctry1 -0.19 0.06 485 -3.06 0.002 *
p7_ctry2 0.61 0.07 485 8.84 <0.001 *
p7_ctry3 -0.10 0.07 485 -1.58 0.115
p7_ctry4 -0.70 0.11 485 -6.65 <0.001 *
scale1 0.01 0.03 485 0.49 0.622
abs:por 0.04 0.04 485 1.06 0.289
abs:p7_ctry1 0.01 0.06 485 0.11 0.913
abs:p7_ctry2 0.02 0.07 485 0.34 0.734
abs:p7_ctry3 0.13 0.07 485 1.88 0.06
abs:p7_ctry4 0.02 0.11 485 0.19 0.846
por:p7_ctry1 0.21 0.06 485 3.30 0.001 *
por:p7_ctry2 -0.05 0.07 485 -0.74 0.463
por:p7_ctry3 -0.01 0.08 485 -0.07 0.946
por:p7_ctry4 0.02 0.09 485 0.16 0.869
abs:scale1 -0.04 0.03 485 -1.30 0.193
por:scale1 0.01 0.03 485 0.27 0.787
p7_ctry1:scale1 -0.08 0.04 485 -1.97 0.05
p7_ctry2:scale1 0.09 0.05 485 1.97 0.05
p7_ctry3:scale1 0.06 0.04 485 1.51 0.133
p7_ctry4:scale1 -0.09 0.07 485 -1.27 0.204
abs:por:p7_ctry1 -0.03 0.06 485 -0.56 0.577
abs:por:p7_ctry2 -0.12 0.07 485 -1.76 0.079
abs:por:p7_ctry3 0.00 0.08 485 0.05 0.963
abs:por:p7_ctry4 0.07 0.09 485 0.73 0.468
abs:por:scale1 -0.03 0.03 485 -1.29 0.196
abs:p7_ctry1:scale1 -0.02 0.04 485 -0.52 0.602
abs:p7_ctry2:scale1 -0.01 0.05 485 -0.23 0.817
abs:p7_ctry3:scale1 -0.01 0.04 485 -0.31 0.759
abs:p7_ctry4:scale1 -0.02 0.07 485 -0.29 0.769
por:p7_ctry1:scale1 -0.02 0.04 485 -0.39 0.697
por:p7_ctry2:scale1 -0.14 0.04 485 -3.12 0.002 *
por:p7_ctry3:scale1 -0.06 0.05 485 -1.22 0.224
por:p7_ctry4:scale1 0.11 0.06 485 1.75 0.081
abs:por:p7_ctry1:scale1 0.03 0.04 485 0.77 0.44
abs:por:p7_ctry2:scale1 0.08 0.05 485 1.83 0.068
abs:por:p7_ctry3:scale1 -0.08 0.05 485 -1.60 0.111
abs:por:p7_ctry4:scale1 -0.01 0.06 485 -0.14 0.891

And here are our results using the Martha Story scale:

parameter b standard error df t p significant
(Intercept) 0.07 0.03 485 2.12 0.034 *
abs 0.18 0.04 485 5.12 <0.001 *
mm 0.22 0.04 485 6.23 <0.001 *
p7_ctry1 -0.19 0.06 485 -3.07 0.002 *
p7_ctry2 0.70 0.07 485 10.74 <0.001 *
p7_ctry3 -0.16 0.06 485 -2.58 0.01 *
p7_ctry4 -0.85 0.08 485 -11.06 <0.001 *
scale1 0.01 0.02 485 0.66 0.509
abs:mm 0.00 0.04 485 0.05 0.961
abs:p7_ctry1 -0.08 0.06 485 -1.36 0.173
abs:p7_ctry2 0.02 0.07 485 0.29 0.775
abs:p7_ctry3 0.09 0.07 485 1.31 0.192
abs:p7_ctry4 0.03 0.09 485 0.39 0.698
mm:p7_ctry1 0.19 0.06 485 3.28 0.001 *
mm:p7_ctry2 -0.07 0.06 485 -1.13 0.26
mm:p7_ctry3 -0.01 0.07 485 -0.19 0.848
mm:p7_ctry4 0.04 0.09 485 0.42 0.678
abs:scale1 -0.03 0.02 485 -1.54 0.125
mm:scale1 -0.05 0.02 485 -2.21 0.028 *
p7_ctry1:scale1 -0.10 0.04 485 -2.51 0.013 *
p7_ctry2:scale1 0.09 0.04 485 2.16 0.031 *
p7_ctry3:scale1 0.07 0.04 485 1.89 0.06
p7_ctry4:scale1 -0.17 0.05 485 -3.58 <0.001 *
abs:mm:p7_ctry1 -0.01 0.05 485 -0.24 0.808
abs:mm:p7_ctry2 -0.14 0.07 485 -2.15 0.032 *
abs:mm:p7_ctry3 0.06 0.07 485 0.90 0.366
abs:mm:p7_ctry4 0.13 0.10 485 1.29 0.196
abs:mm:scale1 -0.01 0.02 485 -0.53 0.599
abs:p7_ctry1:scale1 -0.01 0.04 485 -0.38 0.705
abs:p7_ctry2:scale1 0.01 0.04 485 0.15 0.884
abs:p7_ctry3:scale1 0.01 0.04 485 0.29 0.769
abs:p7_ctry4:scale1 0.02 0.05 485 0.39 0.7
mm:p7_ctry1:scale1 -0.05 0.04 485 -1.34 0.182
mm:p7_ctry2:scale1 -0.08 0.04 485 -2.13 0.033 *
mm:p7_ctry3:scale1 -0.02 0.04 485 -0.42 0.674
mm:p7_ctry4:scale1 0.09 0.05 485 1.73 0.084
abs:mm:p7_ctry1:scale1 -0.03 0.03 485 -1.03 0.304
abs:mm:p7_ctry2:scale1 0.04 0.04 485 0.99 0.321
abs:mm:p7_ctry3:scale1 -0.07 0.04 485 -1.69 0.091
abs:mm:p7_ctry4:scale1 -0.02 0.06 485 -0.29 0.772

In both cases, we see evidence for absorption and porosity being positively related to spiritual experiences even after controlling for each other: The relationship between absorption and spiritual experience was significantly positive, controlling for porosity; and the effect of porosity (as indexed by either the Dulin scale or the Martha Story scale) and spiritual experience was also significantly positive, controlling for absorption. There was no strong evidence of an interactive effect of absorption and porosity in either case (see bolded rows in tables above).

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

Here are our results using the Porosity (Dulin) scale:

parameter b standard error df t p significant
US
(Intercept) 0.00 0.07 98 -0.04 0.97
abs 0.18 0.08 98 2.33 0.022 *
por 0.50 0.08 98 6.60 <0.001 *
scale1 0.00 0.04 98 0.03 0.973
abs:por 0.01 0.07 98 0.16 0.87
abs:scale1 -0.06 0.04 98 -1.58 0.117
por:scale1 0.00 0.04 98 -0.08 0.939
abs:por:scale1 -0.01 0.04 98 -0.15 0.884
Ghana
(Intercept) 0.02 0.08 96 0.20 0.845
abs 0.12 0.08 96 1.54 0.128
por 0.26 0.08 96 3.18 0.002 *
scale1 -0.01 0.06 96 -0.12 0.908
abs:por -0.06 0.08 96 -0.85 0.399
abs:scale1 0.02 0.06 96 0.27 0.785
por:scale1 -0.06 0.06 96 -1.07 0.289
abs:por:scale1 0.03 0.06 96 0.50 0.618
Thailand
(Intercept) -0.01 0.07 107 -0.13 0.898
abs 0.32 0.07 107 4.47 <0.001 *
por 0.34 0.07 107 4.83 <0.001 *
scale1 0.02 0.05 107 0.53 0.594
abs:por 0.04 0.07 107 0.59 0.553
abs:scale1 -0.02 0.05 107 -0.33 0.739
por:scale1 0.01 0.05 107 0.16 0.875
abs:por:scale1 -0.11 0.04 107 -2.46 0.015 *
China
(Intercept) -0.04 0.08 96 -0.50 0.617
abs 0.12 0.08 96 1.59 0.116
por 0.48 0.08 96 6.08 <0.001 *
scale1 0.02 0.05 96 0.40 0.691
abs:por 0.12 0.07 96 1.68 0.097
abs:scale1 -0.05 0.05 96 -1.05 0.297
por:scale1 0.08 0.05 96 1.61 0.111
abs:por:scale1 -0.06 0.04 96 -1.33 0.187
Vanuatu
(Intercept) -0.02 0.09 88 -0.25 0.8
abs 0.11 0.09 88 1.30 0.197
por 0.17 0.09 88 2.01 0.047 *
scale1 0.01 0.06 88 0.11 0.912
abs:por 0.10 0.08 88 1.17 0.246
abs:scale1 -0.02 0.06 88 -0.27 0.789
por:scale1 0.11 0.06 88 1.78 0.079
abs:por:scale1 -0.03 0.06 88 -0.51 0.613

And here are our results using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.01 0.08 98 0.06 0.949
abs 0.13 0.08 98 1.61 0.111
mm 0.45 0.08 98 5.37 <0.001 *
scale1 0.02 0.04 98 0.54 0.589
abs:mm -0.01 0.08 98 -0.19 0.852
abs:scale1 -0.04 0.04 98 -0.87 0.387
mm:scale1 -0.10 0.04 98 -2.43 0.017 *
abs:mm:scale1 -0.06 0.04 98 -1.57 0.119
Ghana
(Intercept) 0.04 0.08 96 0.46 0.646
abs 0.13 0.08 96 1.61 0.111
mm 0.15 0.08 96 1.88 0.064
scale1 0.00 0.06 96 0.04 0.966
abs:mm -0.15 0.08 96 -1.80 0.076
abs:scale1 0.02 0.06 96 0.40 0.689
mm:scale1 -0.11 0.06 96 -1.92 0.058
abs:mm:scale1 -0.01 0.06 96 -0.17 0.869
Thailand
(Intercept) -0.02 0.07 107 -0.26 0.797
abs 0.32 0.08 107 4.26 <0.001 *
mm 0.23 0.08 107 3.05 0.003 *
scale1 0.03 0.05 107 0.56 0.575
abs:mm 0.07 0.07 107 0.98 0.329
abs:scale1 0.00 0.05 107 -0.10 0.918
mm:scale1 -0.03 0.05 107 -0.62 0.54
abs:mm:scale1 -0.09 0.04 107 -2.14 0.035 *
China
(Intercept) -0.01 0.08 96 -0.17 0.862
abs 0.24 0.08 96 2.97 0.004 *
mm 0.37 0.08 96 4.70 <0.001 *
scale1 0.00 0.04 96 0.10 0.917
abs:mm 0.14 0.08 96 1.70 0.092
abs:scale1 -0.02 0.04 96 -0.50 0.619
mm:scale1 0.00 0.04 96 0.00 1
abs:mm:scale1 -0.05 0.05 96 -1.02 0.311
Vanuatu
(Intercept) 0.00 0.09 88 0.04 0.97
abs 0.14 0.09 88 1.63 0.106
mm 0.07 0.09 88 0.82 0.414
scale1 -0.01 0.06 88 -0.14 0.885
abs:mm -0.03 0.08 88 -0.32 0.752
abs:scale1 0.00 0.06 88 -0.03 0.974
mm:scale1 0.04 0.06 88 0.60 0.55
abs:mm:scale1 0.07 0.06 88 1.22 0.225

In both cases, we see some evidence for porosity “swamping out” the effect of absorption in some sites, including Ghana, China, and Vanuatu when porosity is indexed by the Porosity (Dulin) scale; and the US, Ghana, and Vanuatu when porosity is indexed by the Martha Story scale (in fact, in this second set of analyses, neither Absorption nor Martha Story ends up being a significant predictor of spiritual experience in Ghana or Vanuatu).

Absorption as primarily individual difference, porosity as primarily cultural difference?

In our theorizing, we often assume that absorption is primarily an individual difference, while porosity is primarily a cultural difference—or at least that absorption is more of an individual difference than is porosity. Do we see any evidence of this in this dataset?

Do individuals vary more in absorption than porosity?

The first way I thought of to approach this question is to look at the degree to which individuals vary in each of these three scales (Absorption, Porosity (Dulin), and Martha Story). We would predict that absorption would vary more across individuals than either of the porosity indices (after resclaing all threee scales to have the same range, within each site).

According to Bartlett tests of homogeneity of variances, the only site where we see the pattern that we’d expect is Vanuatu: Individuals differed significantly more in their Absorption scores than in their Porosity (Dulin) scores or Martha Story scores. In China, individuals differed significantly more in their Absorption scores than in their Martha Story scores, but variance was equal across the Absorption and Porosity scores. In Ghana, we actually saw the reverse pattern to what we’d expect: Individuals differed significantly less in their Absorption scores than in their Martha Story scores (and the differences between Absorption and Porosity (Dulin) also went in the same directly, although it was not significant).

My take-away here is that there is no strong evidence from these analyses of homogeneity of variance that individuals (within a site) varied more in absorption than in porosity.

Do site differences account for more of the variance in porosity than in absorption?

The second way I thought of to approach this question is to look at the amount of variance explained by site differences for in each of these three scales (Absorption, Porosity (Dulin), and Martha Story). We would predict that site differences would explain more of the variance in porosity than in absorption (no rescaling necessary here).

Numerically speaking, this appears to be true: In a set of linear models, site differences explain only 9% of the variance in Absorption scores, vs. 40% of the variance in Porosity (Dulin) scores and 22% of the variance in Martha Story scores.

Here, I’ll try to compare these statistically (using scores for each scale that have been standardized, collapsing across sites):

parameter b standard error df t p significant
(Intercept) 0.02 0.03 500 0.59 0.552
p7_ctrynonUS_US 0.07 0.01 500 4.87 <0.001 *
p7_ctryGHVT_THCH 0.41 0.03 500 12.34 <0.001 *
p7_ctryGH_VT -0.12 0.05 500 -2.44 0.015 *
p7_ctryTH_CH -0.02 0.05 500 -0.35 0.725
scalepmm_abs 0.00 0.01 1000 0.08 0.939
scalepor_mm 0.00 0.02 1000 0.18 0.857
p7_ctrynonUS_US:scalepmm_abs 0.02 0.01 1000 3.80 <0.001 *
p7_ctryGHVT_THCH:scalepmm_abs 0.15 0.01 1000 10.40 <0.001 *
p7_ctryGH_VT:scalepmm_abs 0.02 0.02 1000 0.72 0.472
p7_ctryTH_CH:scalepmm_abs -0.21 0.02 1000 -10.74 <0.001 *
p7_ctrynonUS_US:scalepor_mm -0.01 0.01 1000 -0.82 0.413
p7_ctryGHVT_THCH:scalepor_mm 0.10 0.03 1000 3.85 <0.001 *
p7_ctryGH_VT:scalepor_mm -0.08 0.04 1000 -2.31 0.021 *
p7_ctryTH_CH:scalepor_mm -0.04 0.03 1000 -1.10 0.272

This analysis appears to be consistent: I think that the interactions that I have bolded in the table above suggest that the differences across sites (here, coded as differences between (a) non-US and US sites, (b) Ghana and Vanuatu vs. Thailand and China, (c) Ghana vs. Vanuatu, and (d) Thailand vs. China) were generally exaggerated in the two porosity scales compared to the Absorption scale, and these seems to be true from the following plot:

My take-away here is that there is pretty strong evidence from these resression analyses that site differences accounted for more of the variance in porosity than in absorption.

Religiosity

Collapsing across sites

Do the relationships between absorption and porosity, on the one hand, and spiritual experience, on the other hand, still hold even after controlling for participants’ self-reported religiosity?

parameter b standard error df t p significant
(Intercept) 0.05 0.05 461 0.91 0.362
abs 0.10 0.05 461 1.86 0.063
por 0.18 0.06 461 3.14 0.002 *
relig_std 0.33 0.06 461 5.09 <0.001 *
scale1 0.02 0.04 461 0.53 0.598
p7_ctry1 -0.21 0.07 461 -2.90 0.004 *
p7_ctry2 0.46 0.08 461 5.83 <0.001 *
p7_ctry3 -0.18 0.07 461 -2.40 0.017 *
p7_ctry4 -0.51 0.15 461 -3.49 <0.001 *
abs:por 0.02 0.06 461 0.39 0.697
abs:relig_std 0.09 0.07 461 1.34 0.181
por:relig_std 0.16 0.06 461 2.71 0.007 *
abs:scale1 -0.04 0.04 461 -1.02 0.309
por:scale1 0.02 0.04 461 0.57 0.57
relig_std:scale1 0.00 0.05 461 0.06 0.95
abs:p7_ctry1 -0.01 0.07 461 -0.22 0.826
abs:p7_ctry2 0.10 0.08 461 1.16 0.245
abs:p7_ctry3 0.13 0.07 461 1.76 0.079
abs:p7_ctry4 0.09 0.14 461 0.67 0.506
por:p7_ctry1 0.11 0.08 461 1.29 0.199
por:p7_ctry2 -0.05 0.09 461 -0.62 0.534
por:p7_ctry3 -0.03 0.09 461 -0.38 0.703
por:p7_ctry4 0.15 0.16 461 0.96 0.338
relig_std:p7_ctry1 0.23 0.08 461 2.74 0.006 *
relig_std:p7_ctry2 -0.01 0.09 461 -0.11 0.913
relig_std:p7_ctry3 0.09 0.11 461 0.76 0.449
relig_std:p7_ctry4 -0.04 0.14 461 -0.30 0.763
scale1:p7_ctry1 -0.08 0.05 461 -1.47 0.141
scale1:p7_ctry2 0.12 0.06 461 2.10 0.036 *
scale1:p7_ctry3 0.09 0.05 461 1.62 0.106
scale1:p7_ctry4 -0.12 0.10 461 -1.20 0.231
abs:por:relig_std -0.03 0.06 461 -0.50 0.616
abs:por:scale1 -0.03 0.04 461 -0.78 0.437
abs:relig_std:scale1 0.00 0.05 461 -0.02 0.987
por:relig_std:scale1 -0.08 0.04 461 -1.96 0.05
abs:por:p7_ctry1 -0.17 0.08 461 -2.26 0.024 *
abs:por:p7_ctry2 -0.18 0.10 461 -1.83 0.068
abs:por:p7_ctry3 -0.07 0.09 461 -0.75 0.452
abs:por:p7_ctry4 0.19 0.15 461 1.24 0.216
abs:relig_std:p7_ctry1 -0.11 0.08 461 -1.33 0.183
abs:relig_std:p7_ctry2 -0.14 0.10 461 -1.43 0.155
abs:relig_std:p7_ctry3 -0.05 0.13 461 -0.42 0.675
abs:relig_std:p7_ctry4 0.03 0.13 461 0.25 0.802
por:relig_std:p7_ctry1 0.03 0.07 461 0.46 0.642
por:relig_std:p7_ctry2 -0.06 0.08 461 -0.76 0.45
por:relig_std:p7_ctry3 0.05 0.13 461 0.40 0.689
por:relig_std:p7_ctry4 -0.04 0.12 461 -0.35 0.728
abs:scale1:p7_ctry1 -0.04 0.05 461 -0.78 0.436
abs:scale1:p7_ctry2 -0.08 0.06 461 -1.24 0.216
abs:scale1:p7_ctry3 0.02 0.05 461 0.32 0.752
abs:scale1:p7_ctry4 0.01 0.10 461 0.10 0.921
por:scale1:p7_ctry1 -0.10 0.06 461 -1.74 0.083
por:scale1:p7_ctry2 -0.08 0.06 461 -1.22 0.222
por:scale1:p7_ctry3 -0.02 0.07 461 -0.36 0.722
por:scale1:p7_ctry4 0.07 0.11 461 0.59 0.556
relig_std:scale1:p7_ctry1 0.01 0.06 461 0.14 0.89
relig_std:scale1:p7_ctry2 -0.02 0.07 461 -0.37 0.715
relig_std:scale1:p7_ctry3 -0.02 0.08 461 -0.21 0.832
relig_std:scale1:p7_ctry4 -0.04 0.10 461 -0.37 0.714
abs:por:relig_std:scale1 0.02 0.04 461 0.42 0.676
abs:por:relig_std:p7_ctry1 -0.05 0.07 461 -0.67 0.502
abs:por:relig_std:p7_ctry2 0.08 0.09 461 0.84 0.4
abs:por:relig_std:p7_ctry3 0.06 0.13 461 0.44 0.663
abs:por:relig_std:p7_ctry4 0.18 0.11 461 1.57 0.117
abs:por:scale1:p7_ctry1 0.12 0.05 461 2.19 0.029 *
abs:por:scale1:p7_ctry2 0.06 0.07 461 0.91 0.364
abs:por:scale1:p7_ctry3 -0.03 0.06 461 -0.41 0.68
abs:por:scale1:p7_ctry4 0.02 0.11 461 0.18 0.853
abs:relig_std:scale1:p7_ctry1 -0.04 0.06 461 -0.74 0.459
abs:relig_std:scale1:p7_ctry2 0.11 0.07 461 1.59 0.113
abs:relig_std:scale1:p7_ctry3 -0.08 0.09 461 -0.88 0.38
abs:relig_std:scale1:p7_ctry4 0.03 0.10 461 0.35 0.728
por:relig_std:scale1:p7_ctry1 0.01 0.05 461 0.17 0.864
por:relig_std:scale1:p7_ctry2 -0.02 0.06 461 -0.25 0.801
por:relig_std:scale1:p7_ctry3 -0.02 0.09 461 -0.24 0.807
por:relig_std:scale1:p7_ctry4 0.06 0.09 461 0.70 0.486
abs:por:relig_std:scale1:p7_ctry1 0.05 0.05 461 0.96 0.338
abs:por:relig_std:scale1:p7_ctry2 -0.02 0.07 461 -0.28 0.776
abs:por:relig_std:scale1:p7_ctry3 -0.22 0.09 461 -2.37 0.018 *
abs:por:relig_std:scale1:p7_ctry4 0.01 0.08 461 0.14 0.887
parameter b standard error df t p significant
(Intercept) 0.04 0.04 461 1.12 0.264
abs 0.19 0.04 461 4.48 <0.001 *
mm 0.14 0.05 461 2.95 0.003 *
relig_std 0.36 0.05 461 7.38 <0.001 *
scale1 0.04 0.03 461 1.49 0.138
p7_ctry1 -0.18 0.06 461 -2.87 0.004 *
p7_ctry2 0.51 0.07 461 7.01 <0.001 *
p7_ctry3 -0.18 0.06 461 -3.00 0.003 *
p7_ctry4 -0.60 0.10 461 -6.29 <0.001 *
abs:mm -0.09 0.05 461 -1.58 0.114
abs:relig_std 0.02 0.05 461 0.44 0.664
mm:relig_std 0.09 0.05 461 1.93 0.054
abs:scale1 -0.06 0.03 461 -1.95 0.052
mm:scale1 -0.04 0.03 461 -1.19 0.233
relig_std:scale1 0.00 0.03 461 0.06 0.95
abs:p7_ctry1 -0.15 0.06 461 -2.50 0.013 *
abs:p7_ctry2 0.05 0.08 461 0.61 0.544
abs:p7_ctry3 0.06 0.07 461 0.93 0.352
abs:p7_ctry4 0.06 0.10 461 0.62 0.536
mm:p7_ctry1 0.12 0.07 461 1.76 0.08
mm:p7_ctry2 -0.06 0.07 461 -0.83 0.406
mm:p7_ctry3 -0.05 0.08 461 -0.62 0.537
mm:p7_ctry4 0.19 0.14 461 1.36 0.175
relig_std:p7_ctry1 0.12 0.07 461 1.89 0.059
relig_std:p7_ctry2 -0.02 0.08 461 -0.20 0.839
relig_std:p7_ctry3 0.09 0.11 461 0.82 0.41
relig_std:p7_ctry4 -0.07 0.09 461 -0.75 0.457
scale1:p7_ctry1 -0.10 0.04 461 -2.19 0.029 *
scale1:p7_ctry2 0.12 0.05 461 2.27 0.024 *
scale1:p7_ctry3 0.06 0.04 461 1.40 0.162
scale1:p7_ctry4 -0.19 0.07 461 -2.79 0.005 *
abs:mm:relig_std 0.09 0.05 461 1.69 0.092
abs:mm:scale1 -0.04 0.04 461 -1.04 0.298
abs:relig_std:scale1 0.03 0.04 461 0.77 0.44
mm:relig_std:scale1 -0.07 0.03 461 -1.96 0.05
abs:mm:p7_ctry1 0.06 0.07 461 0.94 0.349
abs:mm:p7_ctry2 -0.11 0.08 461 -1.35 0.177
abs:mm:p7_ctry3 0.08 0.08 461 1.02 0.31
abs:mm:p7_ctry4 0.17 0.16 461 1.09 0.276
abs:relig_std:p7_ctry1 -0.02 0.07 461 -0.24 0.811
abs:relig_std:p7_ctry2 -0.10 0.09 461 -1.05 0.295
abs:relig_std:p7_ctry3 0.07 0.13 461 0.58 0.56
abs:relig_std:p7_ctry4 0.10 0.11 461 0.95 0.341
mm:relig_std:p7_ctry1 0.02 0.06 461 0.26 0.794
mm:relig_std:p7_ctry2 -0.03 0.07 461 -0.39 0.693
mm:relig_std:p7_ctry3 -0.03 0.10 461 -0.35 0.723
mm:relig_std:p7_ctry4 0.07 0.10 461 0.69 0.488
abs:scale1:p7_ctry1 0.00 0.04 461 -0.02 0.987
abs:scale1:p7_ctry2 -0.04 0.06 461 -0.68 0.494
abs:scale1:p7_ctry3 0.05 0.05 461 1.06 0.292
abs:scale1:p7_ctry4 0.04 0.07 461 0.57 0.569
mm:scale1:p7_ctry1 -0.10 0.05 461 -2.22 0.027 *
mm:scale1:p7_ctry2 -0.02 0.05 461 -0.47 0.64
mm:scale1:p7_ctry3 0.02 0.06 461 0.34 0.737
mm:scale1:p7_ctry4 0.05 0.10 461 0.53 0.596
relig_std:scale1:p7_ctry1 0.05 0.05 461 1.08 0.28
relig_std:scale1:p7_ctry2 -0.05 0.06 461 -0.81 0.417
relig_std:scale1:p7_ctry3 0.01 0.08 461 0.08 0.934
relig_std:scale1:p7_ctry4 0.01 0.06 461 0.12 0.905
abs:mm:relig_std:scale1 0.02 0.04 461 0.54 0.589
abs:mm:relig_std:p7_ctry1 -0.06 0.06 461 -0.90 0.37
abs:mm:relig_std:p7_ctry2 -0.01 0.08 461 -0.12 0.905
abs:mm:relig_std:p7_ctry3 -0.06 0.11 461 -0.55 0.58
abs:mm:relig_std:p7_ctry4 -0.03 0.12 461 -0.25 0.803
abs:mm:scale1:p7_ctry1 0.02 0.05 461 0.34 0.736
abs:mm:scale1:p7_ctry2 0.03 0.06 461 0.59 0.553
abs:mm:scale1:p7_ctry3 0.00 0.06 461 -0.04 0.967
abs:mm:scale1:p7_ctry4 -0.02 0.11 461 -0.19 0.848
abs:relig_std:scale1:p7_ctry1 -0.03 0.05 461 -0.72 0.472
abs:relig_std:scale1:p7_ctry2 0.07 0.06 461 1.07 0.285
abs:relig_std:scale1:p7_ctry3 -0.05 0.09 461 -0.51 0.612
abs:relig_std:scale1:p7_ctry4 -0.04 0.07 461 -0.51 0.61
mm:relig_std:scale1:p7_ctry1 0.00 0.04 461 0.03 0.979
mm:relig_std:scale1:p7_ctry2 -0.05 0.05 461 -0.95 0.345
mm:relig_std:scale1:p7_ctry3 -0.02 0.07 461 -0.30 0.765
mm:relig_std:scale1:p7_ctry4 0.04 0.07 461 0.54 0.589
abs:mm:relig_std:scale1:p7_ctry1 0.02 0.04 461 0.51 0.608
abs:mm:relig_std:scale1:p7_ctry2 0.03 0.06 461 0.53 0.594
abs:mm:relig_std:scale1:p7_ctry3 -0.11 0.08 461 -1.45 0.148
abs:mm:relig_std:scale1:p7_ctry4 -0.05 0.08 461 -0.64 0.522

Following other analysis, I examined this separately using Porosity (Dulin) and Martha Story as indices of porosity. In both cases, religiosity was a significant positive predictor of spiritual experience (as we’d expect). But, importantly, the main effects of porosity remained significantly positive in both analyses, even after controlling for participants’ self-reported religiosity (see bolded rows in tables above). The main effect of absorption remained significantly positive when porosity was indexed by the Martha Story (second table), but not when porosity was indexed by the Porosity (Dulin) scale (although some would consider this effect to be “marginally significant”).

My take-away here is that religiosity does not fully “explain away” the observed relationships between absorption and porosity, on the one hand, and spiritual experience, on the other.

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

parameter b standard error df t p significant
US
(Intercept) 0.04 0.07 93 0.50 0.617
abs 0.16 0.07 93 2.19 0.031 *
por 0.28 0.08 93 3.36 0.001 *
relig_std 0.49 0.07 93 7.12 <0.001 *
scale1 0.04 0.04 93 0.92 0.361
abs:por -0.17 0.08 93 -2.01 0.047 *
abs:relig_std 0.01 0.07 93 0.15 0.884
por:relig_std 0.19 0.06 93 3.10 0.003 *
abs:scale1 -0.13 0.05 93 -2.80 0.006 *
por:scale1 -0.08 0.05 93 -1.55 0.125
relig_std:scale1 0.05 0.04 93 1.07 0.288
abs:por:relig_std -0.09 0.06 93 -1.41 0.161
abs:por:scale1 0.10 0.05 93 1.89 0.061
abs:relig_std:scale1 -0.08 0.04 93 -1.85 0.067
por:relig_std:scale1 -0.07 0.04 93 -1.96 0.053
abs:por:relig_std:scale1 0.08 0.04 93 1.98 0.051
Ghana
(Intercept) -0.28 0.11 91 -2.51 0.014 *
abs 0.09 0.11 91 0.85 0.398
por 0.12 0.10 91 1.17 0.244
relig_std 0.44 0.12 91 3.73 <0.001 *
scale1 0.01 0.09 91 0.10 0.917
abs:por -0.14 0.10 91 -1.33 0.188
abs:relig_std 0.01 0.11 91 0.04 0.965
por:relig_std 0.08 0.09 91 0.83 0.408
abs:scale1 -0.07 0.08 91 -0.87 0.386
por:scale1 -0.02 0.08 91 -0.28 0.782
relig_std:scale1 0.03 0.09 91 0.28 0.778
abs:por:relig_std 0.04 0.09 91 0.48 0.633
abs:por:scale1 -0.01 0.08 91 -0.12 0.906
abs:relig_std:scale1 0.12 0.09 91 1.31 0.194
por:relig_std:scale1 -0.08 0.07 91 -1.10 0.273
abs:por:relig_std:scale1 0.01 0.07 91 0.16 0.877
Thailand
(Intercept) -0.08 0.07 102 -1.12 0.266
abs 0.30 0.07 102 4.56 <0.001 *
por 0.19 0.07 102 2.59 0.011 *
relig_std 0.51 0.13 102 3.98 <0.001 *
scale1 0.03 0.05 102 0.71 0.48
abs:por -0.04 0.07 102 -0.62 0.539
abs:relig_std 0.04 0.15 102 0.24 0.811
por:relig_std 0.23 0.13 102 1.73 0.087
abs:scale1 0.00 0.05 102 -0.04 0.968
por:scale1 0.04 0.05 102 0.70 0.487
relig_std:scale1 0.05 0.09 102 0.56 0.577
abs:por:relig_std 0.02 0.12 102 0.18 0.861
abs:por:scale1 -0.06 0.05 102 -1.15 0.255
abs:relig_std:scale1 -0.03 0.11 102 -0.27 0.784
por:relig_std:scale1 0.00 0.09 102 -0.05 0.96
abs:por:relig_std:scale1 -0.20 0.08 102 -2.30 0.023 *
China
(Intercept) 0.27 0.12 92 2.19 0.031 *
abs 0.03 0.14 92 0.25 0.804
por 0.52 0.13 92 4.03 <0.001 *
relig_std 0.38 0.10 92 3.80 <0.001 *
scale1 -0.04 0.09 92 -0.42 0.672
abs:por 0.23 0.12 92 1.87 0.065
abs:relig_std 0.00 0.10 92 0.04 0.968
por:relig_std 0.23 0.10 92 2.36 0.02 *
abs:scale1 -0.04 0.10 92 -0.38 0.707
por:scale1 0.05 0.09 92 0.61 0.541
relig_std:scale1 -0.06 0.07 92 -0.94 0.352
abs:por:relig_std 0.15 0.08 92 1.87 0.064
abs:por:scale1 -0.04 0.08 92 -0.45 0.657
abs:relig_std:scale1 0.01 0.07 92 0.18 0.855
por:relig_std:scale1 -0.04 0.07 92 -0.64 0.527
abs:por:relig_std:scale1 0.01 0.06 92 0.25 0.807
Vanuatu
(Intercept) -0.22 0.12 83 -1.88 0.063
abs 0.01 0.14 83 0.04 0.972
por 0.08 0.12 83 0.66 0.514
relig_std 0.38 0.15 83 2.50 0.014 *
scale1 -0.04 0.08 83 -0.45 0.652
abs:por 0.18 0.14 83 1.30 0.199
abs:relig_std 0.15 0.17 83 0.89 0.377
por:relig_std 0.07 0.15 83 0.49 0.626
abs:scale1 -0.21 0.10 83 -2.03 0.046 *
por:scale1 0.09 0.09 83 1.07 0.287
relig_std:scale1 0.07 0.11 83 0.67 0.503
abs:por:relig_std -0.22 0.18 83 -1.24 0.218
abs:por:scale1 -0.14 0.10 83 -1.44 0.154
abs:relig_std:scale1 0.25 0.12 83 2.07 0.041 *
por:relig_std:scale1 -0.04 0.11 83 -0.34 0.737
abs:por:relig_std:scale1 0.13 0.13 83 1.00 0.32

And here are our results using the Martha Story scale:

parameter b standard error df t p significant
US
(Intercept) 0.06 0.07 93 0.78 0.44
abs 0.06 0.07 93 0.90 0.371
mm 0.28 0.07 93 3.92 <0.001 *
relig_std 0.44 0.06 93 7.20 <0.001 *
scale1 0.07 0.04 93 1.67 0.098
abs:mm -0.03 0.07 93 -0.47 0.641
abs:relig_std -0.01 0.06 93 -0.13 0.898
mm:relig_std 0.11 0.06 93 2.01 0.047 *
abs:scale1 -0.06 0.04 93 -1.43 0.155
mm:scale1 -0.15 0.04 93 -3.63 <0.001 *
relig_std:scale1 0.08 0.04 93 2.39 0.019 *
abs:mm:relig_std 0.05 0.06 93 0.71 0.48
abs:mm:scale1 -0.03 0.04 93 -0.79 0.432
abs:relig_std:scale1 -0.03 0.03 93 -0.77 0.446
mm:relig_std:scale1 -0.07 0.03 93 -2.22 0.029 *
abs:mm:relig_std:scale1 0.06 0.04 93 1.54 0.126
Ghana
(Intercept) -0.25 0.11 91 -2.40 0.018 *
abs 0.11 0.10 91 1.08 0.285
mm 0.09 0.09 91 0.96 0.339
relig_std 0.43 0.11 91 3.94 <0.001 *
scale1 0.03 0.08 91 0.37 0.713
abs:mm -0.22 0.10 91 -2.30 0.024 *
abs:relig_std 0.01 0.11 91 0.07 0.945
mm:relig_std 0.04 0.09 91 0.50 0.62
abs:scale1 -0.07 0.08 91 -0.94 0.349
mm:scale1 -0.05 0.07 91 -0.76 0.448
relig_std:scale1 -0.01 0.08 91 -0.11 0.916
abs:mm:relig_std 0.11 0.09 91 1.18 0.242
abs:mm:scale1 -0.07 0.07 91 -0.89 0.376
abs:relig_std:scale1 0.13 0.08 91 1.62 0.109
mm:relig_std:scale1 -0.12 0.07 91 -1.79 0.076
abs:mm:relig_std:scale1 0.08 0.07 91 1.18 0.241
Thailand
(Intercept) -0.06 0.07 102 -0.87 0.387
abs 0.31 0.07 102 4.37 <0.001 *
mm 0.12 0.08 102 1.64 0.104
relig_std 0.59 0.13 102 4.50 <0.001 *
scale1 0.03 0.05 102 0.58 0.56
abs:mm 0.00 0.08 102 -0.05 0.961
abs:relig_std 0.12 0.17 102 0.70 0.488
mm:relig_std 0.06 0.13 102 0.42 0.675
abs:scale1 0.00 0.05 102 0.08 0.939
mm:scale1 0.00 0.05 102 0.01 0.993
relig_std:scale1 0.05 0.09 102 0.52 0.604
abs:mm:relig_std 0.03 0.12 102 0.27 0.788
abs:mm:scale1 -0.05 0.05 102 -0.89 0.377
abs:relig_std:scale1 0.00 0.11 102 -0.01 0.996
mm:relig_std:scale1 -0.06 0.09 102 -0.62 0.54
abs:mm:relig_std:scale1 -0.10 0.08 102 -1.23 0.221
China
(Intercept) 0.38 0.13 92 2.86 0.005 *
abs 0.33 0.14 92 2.27 0.026 *
mm 0.45 0.12 92 3.84 <0.001 *
relig_std 0.45 0.10 92 4.50 <0.001 *
scale1 0.03 0.09 92 0.31 0.756
abs:mm 0.09 0.13 92 0.73 0.465
abs:relig_std 0.15 0.10 92 1.40 0.164
mm:relig_std 0.24 0.09 92 2.60 0.011 *
abs:scale1 -0.01 0.09 92 -0.10 0.918
mm:scale1 -0.06 0.08 92 -0.83 0.409
relig_std:scale1 0.00 0.07 92 0.04 0.968
abs:mm:relig_std 0.07 0.09 92 0.71 0.482
abs:mm:scale1 -0.07 0.08 92 -0.86 0.391
abs:relig_std:scale1 0.00 0.07 92 -0.02 0.981
mm:relig_std:scale1 -0.07 0.06 92 -1.27 0.209
abs:mm:relig_std:scale1 -0.04 0.06 92 -0.68 0.498
Vanuatu
(Intercept) -0.27 0.12 83 -2.32 0.023 *
abs -0.06 0.15 83 -0.39 0.698
mm -0.15 0.13 83 -1.13 0.263
relig_std 0.43 0.15 83 2.93 0.004 *
scale1 -0.06 0.09 83 -0.67 0.503
abs:mm -0.32 0.16 83 -2.00 0.049 *
abs:relig_std 0.19 0.17 83 1.12 0.264
mm:relig_std 0.15 0.14 83 1.02 0.312
abs:scale1 -0.22 0.11 83 -2.03 0.045 *
mm:scale1 -0.03 0.10 83 -0.28 0.783
relig_std:scale1 0.08 0.11 83 0.71 0.479
abs:mm:relig_std 0.28 0.19 83 1.52 0.132
abs:mm:scale1 -0.12 0.12 83 -1.01 0.314
abs:relig_std:scale1 0.25 0.13 83 1.99 0.05
mm:relig_std:scale1 0.02 0.11 83 0.21 0.836
abs:mm:relig_std:scale1 0.18 0.14 83 1.33 0.189

I see two general patterns here:

  1. In the US, Thai, and Chinese samples, absorption, porosity, and religiosity all remain significant predictors of spiritual experience when controlling for each other in one of the two analyses reported above. In the other analysis, there is some evidence for “swamping out”: In the US and Chinese samples, the effect of absorption becomes non-significant in the other analysis; and in Thailand, the effect of porosity becomes non-significant in the other analysis. Generally speaking, though, I’d say this is moderate evidence that religiosity does not fully “explain away” the effects of absorption and porosity in these three sites (the US, Thailand, and China).
  2. In Ghana and Vanuatu, only religiosity remains a significant predictor of spiritual experience in these analyses. This could be interpreted as evidence that religiosity does “explain away” the effects of absorption and porosity in these two (devoutly Christian) sites (Ghana and Vanuatu).

To help with our interpretation, here are the correlations with religiosity, this time looking at scores standardized within each site:

Joining, by = c("p7_ctry", "scale")

Which experiences are predicted by absorption vs. porosity?

Collapsing across sites

Here are the top ten most strongly correlated items for each of our three predictors of interest (Absorption, Porosity (Dulin), and Martha Story):

Correlation Question text Scale
Absorption
0.356 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.326 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.294 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.288 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.264 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.259 8) [send msg]. I am completely convinced that I have had at least one experience of sending a "mental message" between myself and another person. Extrasensory
0.258 4. I can hear music when it is not being played. [music] Unusual Events
0.245 3. I hear people call my name and find that nobody has done so. [call name] Unusual Events
0.244 5. Have you ever felt that God or a spirit placed an image inside your head? [image in] Spiritual Events
0.230 19. Have you ever had the experience of being awake but unable to move? [awake paralysis] Spiritual Events
Porosity (Dulin)
0.617 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
0.616 9. I feel guided by God in the midst of daily activities. [guided daily] Daily Spiritual Experiences
0.595 11. I feel God's love for me, through others. [love through others] Daily Spiritual Experiences
0.569 4. I find strength in my religion or spirituality. [spiritual strength] Daily Spiritual Experiences
0.567 3. Have you felt that God or a spirit placed thoughts inside your head? [placed thought] Spiritual Events
0.562 8. I ask for God's help in the midst of daily activities. [God help] Daily Spiritual Experiences
0.544 1. I feel God's presence. [God presence] Daily Spiritual Experiences
0.540 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
0.521 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
0.510 5. I find comfort in my religion or spirituality. [spiritual comfort] Daily Spiritual Experiences
Martha Story
0.470 23. Have you ever experienced the presence of God through your own miraculous healing? [heal you] Spiritual Events
0.465 9. I feel guided by God in the midst of daily activities. [guided daily] Daily Spiritual Experiences
0.451 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
0.448 11. I feel God's love for me, through others. [love through others] Daily Spiritual Experiences
0.443 3. Have you felt that God or a spirit placed thoughts inside your head? [placed thought] Spiritual Events
0.427 22. Have you ever experienced the presence of God in a miraculous healing (that you saw in person, not on television)? [live heal] Spiritual Events
0.414 21. Have you ever experienced the presence of God through illness (including as warning or punishment)? [illness] Spiritual Events
0.413 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
0.411 1. I feel God's presence. [God presence] Daily Spiritual Experiences
0.404 4. I find strength in my religion or spirituality. [spiritual strength] Daily Spiritual Experiences

And here’s a visualization of the correlations of these three predictors with all “experience” items in this packet (spiritual and secular):

Considering each site individually

Here are the top three most strongly correlated items for each of our three predictors of interest (Absorption, Porosity (Dulin), and Martha Story):

Site Correlation Question text Scale
Absorption
US 0.515 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.491 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.380 3) [psychic]. I am completely convinced that I am psychic. Extrasensory
Ghana 0.333 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.262 14. I feel a selfless caring for others. [selfless care] Daily Spiritual Experiences
0.246 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
Thailand 0.403 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.377 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.345 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
China 0.366 15. Have you ever had a feeling of overwhelming emotion during prayer? [emotional prayer] Spiritual Events
0.357 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
0.352 7. I see shadows and shapes when there is nothing there. [shadows] Unusual Events
Vanuatu 0.397 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.313 3. I hear people call my name and find that nobody has done so. [call name] Unusual Events
0.253 5. Have you ever felt that God or a spirit placed an image inside your head? [image in] Spiritual Events
Porosity (Dulin)
US 0.580 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.579 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
0.554 9. Have you ever had a dream you felt was sent by God or a spirit? [dream] Spiritual Events
Ghana 0.353 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
0.340 9. Have you ever had a dream you felt was sent by God or a spirit? [dream] Spiritual Events
0.314 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
Thailand 0.479 16. Have you ever had a sense of intense power shoot through you during prayer? [powerful prayer] Spiritual Events
0.413 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.378 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
China 0.577 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.569 8) [send msg]. I am completely convinced that I have had at least one experience of sending a "mental message" between myself and another person. Extrasensory
0.558 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
Vanuatu 0.444 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.367 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
0.310 2. I experience a connection to all of life. [connection to life] Daily Spiritual Experiences
Martha Story
US 0.610 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.599 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.539 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
Ghana 0.321 23. Have you ever experienced the presence of God through your own miraculous healing? [heal you] Spiritual Events
0.297 7. I see shadows and shapes when there is nothing there. [shadows] Unusual Events
0.288 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
Thailand 0.385 8. Have you ever felt that you tasted God or a spirit? [taste] Spiritual Events
0.330 21. Have you ever experienced the presence of God through illness (including as warning or punishment)? [illness] Spiritual Events
0.322 16. Have you ever had a sense of intense power shoot through you during prayer? [powerful prayer] Spiritual Events
China 0.417 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.404 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
0.389 22. Have you ever experienced the presence of God in a miraculous healing (that you saw in person, not on television)? [live heal] Spiritual Events
Vanuatu 0.345 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.256 15. I accept others even when they do things I think are wrong. [accept wrong] Daily Spiritual Experiences
0.255 2. I experience a connection to all of life. [connection to life] Daily Spiritual Experiences

And here’s a visualization of the correlations of these three predictors with all “experience” items in this packet (spiritual and secular):

Porosity: good vs. bad emotions

Which emotions were considered most “potent” in our measures of porosity?

Porosity scale (Dulin)

The items coded by TML as “negative” seem to have elicited somewhat stronger endorsements than the items coded as “positive,” though this difference appears to have been quite small (maybe n ot significant) in the US and China.

What about when we look at individual quesitons?

Joining, by = "question"

I’m not going to comment on this at the moment. (But note that Thailand was missing question #13 in this scale - throughout this document, scores for Thailand have been adjusted accordingly so that Thai participants do not have artifically deflated Porosity scores!)

Joining, by = "question"

Martha story

Removed 3 rows containing missing values (geom_point).

To my eyes, there is no single pattern here: In the US and China, caring seems to have elicited stronger responses than the other emotions; in Vanuatu and possibly Thailand, anger seems to have elicted stronger responses; in Ghana, the three emotions seem to have elicited roughly similar responses.

What about when we look at individual quesitons?

Joining, by = "question"

Joining, by = "question"

This complicates (and to my mind, clarifies) the picture somewhat. Here are a few observations:

  • In some sites participants were pretty consistent across questions in terms of the “ordering” of emotions: e.g….
    • In the US (leftmost column), caring was virtually always most potent
    • In China (fourth column from left), caring was almost always most potent, with the major exception of question “d” (whether the emotion could make the emoter sick/well)
    • In Vanuatu (rightmost column) anger was almost always most potent (with the major exception of question “c” (whether a spirit could use the emotion to hurt/help)
  • In other sites participants differentiated more between different kinds of questions: e.g….
    • In Thailand, (middle column) anger was more potent for questions “b” and “d,” while caring was clearly more potent for question “e”
  • Some questions elicited similar “orderings” of emotions across sites: e.g….
    • For question “c” (whether a spirit could use the emotion to hurt/help), when sites differentiated across emotions, it tended to be in the direction of caring being most potent (but people didn’t really differentiate in Ghana or Thailand)
    • For question “d” (whether the emotion could make the emoter sick/well), when sites differentiated across emotions, it tended to be in the direction of anger being most potent (but people didn’t really differentiate in the US)
    • For question “e” (whether, if the other person got sick/well, the emoter’s emotion could be the cause), when sites differentiated across emotions, it tended to be in the direction of caring being most potent (but people didn’t really differentiate in Vanuatu)
  • Other questions elicited different “orderings” of emotions across sites (quesiton “a,” whether the emoter could hurt/help the other with their emotion; and question “b,” whether the emoter could hurt/help the other just by thinking emotional thoughts)

Site differences in “control” scales

Removed 15 rows containing missing values (geom_point).

Overall scores

Histograms for each scale

Absorption

Daily spiritual experiences

Spiritual events

Ways of being

All items

Excluding reverse-coded items

attributes are not identical across measure variables;
they will be droppedNAs introduced by coercion

Uncommon events

Extrasensory

Hard thinking

All items

Excluding reverse-coded items

attributes are not identical across measure variables;
they will be droppedNAs introduced by coercion

Porosity

Martha story

Reliability

Correlations

Demographics

[1] "Participants who passed all attention checks"
[1] "All participants"
[1] "Participants who passed all attention checks"
[1] "All participants"

Important to note that a very substantial majority of participants in Thailand were female, and a slight majority of participants in Vanuatu were female.

[1] "Participants who passed all attention checks"
[1] "All participants"
LS0tCnRpdGxlOiAiUGFja2V0IDcgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wNS0wNyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBQYWNrZXQgNyBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTE4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgbWluaW11bSBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0Kc291cmNlKCIuL3NjcmlwdHMvcDdfZGF0YV9wcmVwLlIiKQpgYGAKCiMgQ29uZmlybWF0b3J5IGh5cG90aGVzZXMgKGFzIHNwZWNpZmllZCBpbiBwcmVyZWdpc3RyYXRpb24pCgpfTk9URTogSSBpbmNsdWRlZCBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MsIHNpbmNlIHdlIGRpZCBub3Qgc3BlY2lmeSB0aGF0IHdlIHdvdWxkIGV4Y2x1ZGUgcGFydGljaXBhbnRzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHRyeSBydW5uaW5nIGV2ZXJ5dGhpbmcgb24gdGhlIHN1YnNldCBvZiBwYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyBqdXN0IHNvIHRoYXQgd2Uga25vdywgYnV0IHRoaXMgZGVjcmVhc2VzIG91ciBzYW1wbGUgc2l6ZXMgcHJldHR5IGRyYW1hdGljYWxseS5fCgpfQUxTTyBOT1RFOiBJIGluY2x1ZGVkIG9ubHkgdGhlIHNlY29uZCBzYW1wbGUgb2YgR2hhbmFpYW4gcGFydGljaXBhbnRzLCB3aG8gd2VyZSByZWNydWl0ZWQgYWNjb3JkaW5nIHRvIG91ciBzdGFuZGFyZHMgYW5kIGFzIHNwZWNpZmllZCBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLiBGb3IgdGhlIG1vc3QgcGFydCwgYWxsIHJlc3VsdHMgYXJlIHRoZSBzYW1lIHdoZW4gaW5jbHVkaW5nIHRoZSBmdWxsLCAiZG91YmxlIiBzYW1wbGUgb2YgR2hhbmFpYW4gcGFydGljaXBhbnRzLl8KCl9BTFNPIE5PVEU6IEluIFRoYWlsYW5kIHRoaXMgcGFja2V0IHdhcyBtaXNzaW5nIG9uZSBxdWVzdGlvbiBvbiB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZS4gSSBoYXZlIHJlc2NhbGVkIFRoYWkgcGFydGljaXBhbnRzJyBQb3Jvc2l0eSBzY29yZXMgdG8gcnVuIGZyb20gMC0zMiBpbiBvcmRlciB0byBtYXRjaCB0aGUgb3RoZXIgc2l0ZXMuXwoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMQoKX19IeXBvdGhlc2lzICMxOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiB0aGUgVGVsbGVnZW4gQWJzb3JwdGlvbiBTY2FsZSAoVGVsbGVnZW4gJiBBdGtpbnNvbiwgMTk3NCkgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgYWJzb3JwdGlvbiBzY29yZXMgdG8gcHJlZGljdCByZXBvcnRzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlcywgYWxsb3dpbmcgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBvdXIgZml2ZSBmaWVsZCBzaXRlcyBhbmQgYWNyb3NzIHRoZSB0d28gc2NhbGVzIHdlIHVzZWQgdG8gbWVhc3VyZSBzcGlyaXR1YWwgZXhwZXJpZW5jZS4gVXNpbmcgdGhlIOKAnGxtZTTigJ0gcGFja2FnZSBmb3IgUiAoQmF0ZXMsIDIwMTgpLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNpdGUgKiBzY2FsZSArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNjYWxl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChlZmZlY3QtY29kZWQpLCBhbmQg4oCcc2l0ZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgZml2ZSBmaWVsZCBzaXRlcyAoZWZmZWN0LWNvZGVkKS4gT3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSB1c2luZyBTYXR0ZXJ0aHdhaXRlJ3MgZGVncmVlcyBvZiBmcmVlZG9tIG1ldGhvZCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUg4oCcbG1lclRlc3TigJ0gcGFja2FnZSBmb3IgUiwgS3V6bmV0c292YSwgQnJvY2tob2ZmLCAmIENocmlzdGVuc2VuLCAyMDE3KS4gKFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IHRvIHVzLCBidXQgYXJlIGV4cGxvcmF0b3J5LikKCklmIHdlIGhhdmUgdHJvdWJsZSBmaXR0aW5nIHRoZXNlIG1vZGVscyBvciB0aGVyZSBhcmUgb3RoZXIgc2lnbnMgb2YgbW9kZWwgZml0IHByb2JsZW1zLCB3ZSB3aWxsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUgbW9kZWw6IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfaDEgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDEkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksCiAgICAgICAgICAgIyBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSBjYmluZChHSCA9IGMoLTEsIDEsIDAsIDAsIDApLAogICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEggPSBjKC0xLCAwLCAxLCAwLCAwKSwKICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIID0gYygtMSwgMCwgMCwgMSwgMCksCiAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVCA9IGMoLTEsIDAsIDAsIDAsIDEpKSksCiAgICAgICAgICAgZF9zdGRfaDEpCiMgc3VtbWFyeShyMSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjEpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDFfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19hYnNfdG90YWwsIHA3X2RzZV90b3RhbCwgcDdfc2VfdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMV9zdW0KYGBgCgoqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzEqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGUgYWJvdmUpLiAKCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBhYnNvcnB0aW9uLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgxX3N1bSRzdGRldltoMV9zdW0kc2NhbGUgPT0gImFicyJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBBYnNvcnB0aW9uIHNjYWxlIChyYW5nZTogMC0zNCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc3VtJHN0ZGV2W2gxX3N1bSRzY2FsZSA9PSAiZHNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGUgKHJhbmdlOiAwLTcwKSBvciBgciAoc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3N1bSRzdGRldltoMV9zdW0kc2NhbGUgPT0gInNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChyYW5nZTogMC04MCkuCgpgYGB7cn0KaDFfcGxvdF9hIDwtIGRfc3RkX2gxICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMxOiBCeSBzaXRlIGFuZCBzY2FsZSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgxX3Bsb3RfYiA8LSBkX3N0ZF9oMSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMxOiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMV9wbG90X2EsIGgxX3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIeXBvdGhlc2lzICMyCgpfX0h5cG90aGVzaXMgIzI6IFBlb3BsZSB3aG8gc2NvcmUgaGlnaGVyIG9uIG91ciB0d28gcG9yb3NpdHkgaW5kaWNlcyBhbHNvIHJlcG9ydCBtb3JlIHNwaXJpdHVhbCBleHBlcmllbmNlcy5fXwoKUHJlcmVnaXN0ZXJlZCBhbmFseXNpczogIldlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSwgY29sbGFwc2luZyBhY3Jvc3MgZmllbGQgc2l0ZXMsIGFuZCB0aGVuIGNvbmR1Y3QgYSBtaXhlZC1lZmZlY3RzIGxpbmVhciByZWdyZXNzaW9uLCB1c2luZyBwb3Jvc2l0eSBzY29yZXMgKGZyb20gZWFjaCBvZiBvdXIgdHdvIGluZGljZXMpIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgYWNyb3NzIHRoZSAyIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcyBpbmNsdWRlZCBpbiBvdXIgc3VydmV5IHBhY2tldCwgYWxsb3dpbmcgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBvdXIgZml2ZSBmaWVsZCBzaXRlcyBhbmQgYWNyb3NzIHRoZSB0d28gc2NhbGVzIHdlIHVzZWQgdG8gbWVhc3VyZSBzcGlyaXR1YWwgZXhwZXJpZW5jZS4gVXNpbmcgdGhlIOKAnGxtZTTigJ0gcGFja2FnZSBmb3IgUiAoQmF0ZXMsIDIwMTgpLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gcG9yb3NpdHkgKiBzaXRlICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLCB3aGVyZSDigJxzY2FsZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgdHdvIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcyAoZWZmZWN0LWNvZGVkKSwgYW5kIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCkuIFdlIHdpbGwgcnVuIHR3byB2ZXJzaW9ucyBvZiB0aGlzIG1vZGVsLCBvbmUgdXNpbmcgZWFjaCBvZiB0aGUgdHdvIOKAnHBvcm9zaXR54oCdIG1lYXN1cmVzIGRlc2NyaWJlZCBhYm92ZS4gRm9yIGVhY2ggcmVncmVzc2lvbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgcG9yb3NpdHkgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCB0ID4gMiwgcCA8IDAuMDUgdXNpbmcgU2F0dGVydGh3YWl0ZSdzIGRlZ3JlZXMgb2YgZnJlZWRvbSBtZXRob2QgYXMgaW1wbGVtZW50ZWQgaW4gdGhlIOKAnGxtZXJUZXN04oCdIHBhY2thZ2UgZm9yIFIsIEt1em5ldHNvdmEsIEJyb2NraG9mZiwgJiBDaHJpc3RlbnNlbiwgMjAxNykuIChUaGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycyBpbmNsdWRlZCBpbiB0aGUgbW9kZWwgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCB0byB1cywgYnV0IGFyZSBleHBsb3JhdG9yeS4pCgpJZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gcG9yb3NpdHkgKiBzY2FsZSArICgxIHwgc2l0ZS9zdWJqZWN0KS4iCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfaDIgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gyJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2gyJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMl9wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwKICAgICAgICAgICAjIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9IGNiaW5kKEdIID0gYygtMSwgMSwgMCwgMCwgMCksCiAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSCA9IGMoLTEsIDAsIDEsIDAsIDApLAogICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ggPSBjKC0xLCAwLCAwLCAxLCAwKSwKICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZUID0gYygtMSwgMCwgMCwgMCwgMSkpKSwKICAgICAgICAgICBkX3N0ZF9oMikKIyBzdW1tYXJ5KHIyX3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX21tIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgIyBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSBjYmluZChHSCA9IGMoLTEsIDEsIDAsIDAsIDApLAogICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEggPSBjKC0xLCAwLCAxLCAwLCAwKSwKICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIID0gYygtMSwgMCwgMCwgMSwgMCksCiAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVCA9IGMoLTEsIDAsIDAsIDAsIDEpKSksCiAgICAgICAgICAgZF9zdGRfaDIpCiMgc3VtbWFyeShyMl9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDJfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X2RzZV90b3RhbCwgcDdfc2VfdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMl9zdW0KYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzIqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgcG9yb3NpdHkgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gYm90aCByZWdyZXNzaW9uIGFuYWx5c2VzIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAicG9yIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFBvcm9zaXR5IHNjYWxlIChyYW5nZTogMC0zMiksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gImRzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChyYW5nZTogMC03MCkgb3IgYHIgKHN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNjYWxlLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtODApLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDJfcGxvdF9iMSA8LSBkX3N0ZF9oMiAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDJfcGxvdF9hMSwgaDJfcGxvdF9iMSwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYTIgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogQnkgc2l0ZSBhbmQgc2NhbGUgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgyX3Bsb3RfYTIsIGgyX3Bsb3RfYjIsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMwoKX19IeXBvdGhlc2lzICMzOiBUaGUgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgZXhwZXJpZW5jZSBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJGb3IgZWFjaCBvZiBvdXIgZml2ZSBmaWVsZCBzaXRlcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlIChjb25zaWRlcmluZyBvbmx5IHBhcnRpY2lwYW50cyBmcm9tIHRoYXQgZmllbGQgc2l0ZSksIGFuZCB0aGVuIGNvbmR1Y3QgdGhlIHNhbWUgYW5hbHlzZXMgc3BlY2lmaWVkIGFib3ZlIGZvciBbSHlwb3RoZXNpcyAjMV0gdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXBbXSBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIFsuLi5dIGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuIEZvciBIeXBvdGhlc2lzICMzLCBvdXIgbW9kZWxzIHdpbGwgdGFrZSB0aGUgZm9sbG93aW5nIGZvcm06IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLiBbLi4uXSBBZ2Fpbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIGFuZCBvZiBlYWNoIHBvcm9zaXR5IG1lYXN1cmUgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCBwIDwgMC4wNSkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX2gxIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBhYnMpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyM191cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM191cykKYGBgCgpgYGB7cn0KcjNfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfZ2gpCmBgYAoKYGBge3J9CnIzX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3RoKQpgYGAKCmBgYHtyfQpyM19jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19jaCkKYGBgCgpgYGB7cn0KcjNfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM192dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjNfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHIzX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM190aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjNfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHIzX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgoqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzMgaW4gYWxsIHNpdGVzIF9leGNlcHRfIFZhbnVhdHUqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgYW5kIENoaW5h4oCUYnV0IHRoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiBWYW51YXR1IChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoZSBlZmZlY3QgIm1hcmdpbmFsbHkgc2lnbmlmaWNhbnQiOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZF9zdGRfYnlzaXRlX2gxICU+JQogICAgICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpLCAKICAgICAgIGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKyAKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKyAKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMzIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiSHlwb3RoZXNpcyAjMSwiIGFib3ZlLikKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzQKCl9fSHlwb3RoZXNpcyAjNDogVGhlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIGV4cGVyaWVuY2UgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5Ll9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiRm9yIGVhY2ggb2Ygb3VyIGZpdmUgZmllbGQgc2l0ZXMsIHdlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSAoY29uc2lkZXJpbmcgb25seSBwYXJ0aWNpcGFudHMgZnJvbSB0aGF0IGZpZWxkIHNpdGUpLCBhbmQgdGhlbiBjb25kdWN0IHRoZSBzYW1lIGFuYWx5c2VzIHNwZWNpZmllZCBhYm92ZSBmb3IgW0h5cG90aGVzaXMgIzJdIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwWy4uLl0gYmV0d2VlbiBwb3Jvc2l0eSBhbmQgZXhwZXJpZW5jZSBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5LiBbLi4uXSBGb3IgSHlwb3RoZXNpcyAjNCwgb3VyIG1vZGVscyB3aWxsIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtOiBleHBlcmllbmNlIH4gcG9yb3NpdHkgKiBzY2FsZSArICgxIHwgc3ViamVjdCkuIFsuLi5dIEFnYWluLCBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSBtYWluIGVmZmVjdCBvZiBhYnNvcnB0aW9uIG9uIGV4cGVyaWVuY2UgYW5kIG9mIGVhY2ggcG9yb3NpdHkgbWVhc3VyZSBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHAgPCAwLjA1KS4iCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX2g0IDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNCRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfcG9yX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfcG9yX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfcG9yX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKVXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlLCAqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzQgaW4gYWxsIHNpdGVzKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIHRoZSBVUywgR2hhbmEsIFRoYWlsYW5kLCBDaGluYSwgYW5kIFZhbnVhdHUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9oNCAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNCAodXNpbmcgUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnI0X21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfbW1fdXMpCmBgYAoKYGBge3J9CnI0X21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfbW1fZ2gpCmBgYAoKYGBge3J9CnI0X21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfbW1fdGgpCmBgYAoKYGBge3J9CnI0X21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfbW1fY2gpCmBgYAoKYGBge3J9CnI0X21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjRfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X21tX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X21tX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpVc2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlLCAqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzQgaW4gYWxsIHNpdGVzIF9leGNlcHRfIFZhbnVhdHUqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgTWFydGhhIFN0b3J5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIHRoZSBVUywgR2hhbmEsIFRoYWlsYW5kLCBhbmQgQ2hpbmHigJRidXQgdGhpcyB3YXMgbm90IHRoZSBjYXNlIGluIFZhbnVhdHUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9oNCAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM0ICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBTZWNvbmRhcnkgZXhwbG9yYXRvcnkgYW5hbHlzZXMKCiMjICJTZWN1bGFyIiBleHBlcmllbmNlcwoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJGaXJzdCwgaW4gb3JkZXIgdG8gZXhwbG9yZSB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBhZmZpcm1hdGlvbiBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgcG9yb3NpdHkgYW5kIGFic29ycHRpb24gYXJlIHNpbXBseSBkdWUgdG8gdGhlIHJlbGlnaW9zaXR5IG9mIHBhcnRpY2lwYW50cywgd2Ugd2lsbCBjb25kdWN0IGFkZGl0aW9uYWwgYW5hbHlzZXMgZm9jdXNpbmcgb24gdGhlIHR3byDigJxzZWN1bGFy4oCdIGV4cGVyaWVuY2Ugc2NhbGVzICh0aGUgcmV2aXNlZCBMYXVuYXkgU2xhZGUgc2NhbGUsIE1vcnJpc29uLCBXZWxscyBhbmQgTm90aGFyZCAyMDAwXTsgYW5kIHRoZSBTaGVlcC1Hb2F0IFtwYXJhbm9ybWFsXSBzY2FsZSwgVGhhbGJvcm5lICYgRGVsaW4sIDE5OTMpLiBUaGVzZSBhbmFseXNlcyB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgcHJpbWFyeSBhbmFseXNlcyBvdXRsaW5lZCBhYm92ZSwgZXhjZXB0IHRoYXQgdGhleSB3aWxsIG9ubHkgaW5jbHVkZSB0aGVzZSB0d28g4oCcc2VjdWxhciBleHBlcmllbmNl4oCdIHNjYWxlcyBhbmQgbm90IHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzLiBXZSBjb25zaWRlciB0aGVzZSB0byBiZSBleHBsb3JhdG9yeSBhbmFseXNlcy4iCgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMQoKYGBge3J9CmRfc3RkX2gxX3NlYyA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gxX3NlYyRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMV9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxX3NlYyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgZF9zdGRfaDFfc2VjKQojIHN1bW1hcnkocjFfc2VjKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDFfc2VjX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUpLAogICAgICAgICAgICBzdGRldiA9IHNkKHNjb3JlKSkgJT4lCiAgdW5ncm91cCgpCmgxX3NlY19zdW0KYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgYWxzbyBzaWduaWZpY2FudGx5IHBvc2l0aXZlKiogKHNlZSBib2xkZWQgcm93IHRhYmxlIGFib3ZlKS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBhYnNvcnB0aW9uLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc2VjdWxhciBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDFfc2VjX3N1bSRzdGRldltoMV9zZWNfc3VtJHNjYWxlID09ICJhYnMiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgQWJzb3JwdGlvbiBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zZWNfc3VtJHN0ZGV2W2gxX3NlY19zdW0kc2NhbGUgPT0gInVuZXYiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFVuY29tbW9uIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtMTgpIG9yIGByIChzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3NlY19zdW0kc3RkZXZbaDFfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGlzIHdhcyBhY3R1YWxseSBhIChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3QgdGhhbiB3aGF0IHdlIGRvY3VtZW50ZWQgZm9yIHNwaXJpdHVhbCBleHBlcmllbmNlcyAoYiA9IGByIHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWApLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyfQpoMV9zZWNfcGxvdF9hIDwtIGRfc3RkX2gxX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxOiBCeSBzaXRlIGFuZCBzY2FsZSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMV9zZWNfcGxvdF9iIDwtIGRfc3RkX2gxX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzE6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMV9zZWNfcGxvdF9hLCBoMV9zZWNfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfaDJfc2VjIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gyX3NlYyRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMl9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIyX3NlY19wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX3NlY19tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMl9zZWNfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X3VuZXZfdG90YWwsIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc2VjX3N1bQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzIsIGluIGJvdGggY2FzZXMsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzIpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJleHNlbiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRXh0cmFzZW5zb3J5IHNjYWxlIChyYW5nZTogMC03KS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfc2VjX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGVzZSB3ZXJlIGFjdHVhbGx5IChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3RzIHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFBvcm9zaXR5OiBiID0gYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgOyBNYXJ0aGEgU3Rvcnk6IGIgPSBgciBzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIGh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2ExLCBoMl9wbG90X2IxLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDJfcGxvdF9hMiA8LSBkX3N0ZF9oMl9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzCgpIZXJlIGFyZSBvdXIgcmVzdWx0czoKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDFfc2VjIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfc2VjX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM19zZWNfdXMpCmBgYAoKYGBge3J9CnIzX3NlY19naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfc2VjX2doKQpgYGAKCmBgYHtyfQpyM19zZWNfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3NlY190aCkKYGBgCgpgYGB7cn0KcjNfc2VjX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19zZWNfY2gpCmBgYAoKYGBge3J9CnIzX3NlY192dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM19zZWNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3NlY191cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM19zZWNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX3NlY19jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBfYWxsXyBzaXRlcyoqLCBpbmNsdWRpbmcgVmFudWF0dSAod2hlcmUgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lCiAgICAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSksIAogICAgICAgYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArIAogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArIAogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNAoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNF9zZWMgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNF9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0X3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0LCB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIF9hbGxfIHNpdGVzKiosIGluY2x1ZGluZyBWYW51YXR1ICh3aGVyZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIF9ub3RfIHNpZ25pZmljYW50bHkgcG9zaXRpdmU7IHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjRfc2VjX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV91cykKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfc2VjX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNCwgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1KiogKHdoZXJlIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3YXMgYWxzbyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAiQ29udHJvbCIgc2NhbGVzIChIeXBvdGhlc2lzICM1KQoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJTZWNvbmQsIGluIG9yZGVyIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgaHlwb3RoZXNpemVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGFuZCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBleHBlcmllbmNlIGNhbiBiZSBleHBsYWluZWQgYnkgYSBsb3dlci1sZXZlbCBwcm9jZXNzZXPigJRuYW1lbHksIGluZGl2aWR1YWwgb3IgY3Jvc3MtY3VsdHVyYWwgZGlmZmVyZW5jZXMgaW4gYW4gb3ZlcmFsbCB0ZW5kZW5jeSB0byBhZ3JlZSB3aXRoIHRoZSBxdWVzdGlvbnMgcG9zZWQgYnkgdGhlc2Ugc2NhbGVzIChpLmUuLCBhIOKAnHllc+KAnSBiaWFzKSwgd2Ugd2lsbCBhbHNvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdHdvIOKAnGNvbnRyb2zigJ0gc2NhbGVzICh0aGUgU2Vuc2Ugb2YgQ29udHJvbCBzY2FsZSwgTGFjaG1hbiAmIFdlYXZlciwgMTk5ODsgYW5kIHRoZSBOZWVkIGZvciBDb2duaXRpb24gc2NhbGUsIENhY2lvcHBvLCBQZXR0eSwgJiBLYW8sIDE5OTMpIGFuZCBvdXIgbWVhc3VyZXMgb2YgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUaGlzIHByb3ZpZGVzIHNvbWV0aGluZyBvZiBhIG5lZ2F0aXZlIGNvbnRyb2wgZm9yIG91ciBwcmltYXJ5IGh5cG90aGVzZXMuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgYW55IHJlbGF0aW9uc2hpcHMgd2l0aCB0aGVzZSBjb250cm9sIG1lYXN1cmVzIHdpbGwgYmUgd2Vha2VyIHRoYW4gdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUbyBhc3Nlc3MgdGhpcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHNjb3JlcyBvbiBhYnNvcnB0aW9uLCBwb3Jvc2l0eSwgYW5kIGNvbnRyb2wgc2NhbGVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFVzaW5nIHRoZSDigJxzdGF0c+KAnSBwYWNrYWdlIGZvciBSLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBzaXRlICArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCksIGFuZOKAlGNyaXRpY2FsbHnigJTigJxwcmVkaWN0b3LigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3J0aG9nb25hbCBjb250cmFzdHM6ICgxKSBTY2FsZXMgb2YgaW50ZXJlc3QgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHZzLiBjb250cm9sIHNjYWxlczsgKDIpIGFic29ycHRpb24gdnMuIHBvcm9zaXR5IG1lYXN1cmVzOyAoMykgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgRHVsaW4gc2NhbGUgdnMuIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1lbnRhbCBDYXVzYXRpb24gc2NhbGU7ICg0KSBOZWVkIGZvciBDb2duaXRpb24gdnMuIE5lZWQgZm9yIENvbnRyb2wgKE1hc3RlcnkgU3Vic2NhbGUpLiBCZWNhdXNlIG9mIHRoZSB1bnVzdWFsIGFuZCBjb21wbGV4IGZvcm11bGF0aW9uIG9mIHRoaXMgbW9kZWzigJRjb25zaWRlcmluZyBlYWNoIG9mIHRoZXNlIDUg4oCccHJlZGljdG9yc+KAnSBhcyByZXBlYXRlZCBvYnNlcnZhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIOKAnHNjb3Jl4oCd4oCUd2Ugd2lsbCBjb25kdWN0IHNlcGFyYXRlIG1vZGVscyBmb3IgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBhbmQgU3Bpcml0dWFsIEV2ZW50cyksIHJhdGhlciB0aGFuIGluY29ycG9yYXRpbmcgYm90aCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgbWVhc3VyZXMgaW50byB0aGUgc2FtZSBtb2RlbCAoYXMgaW4gSHlwb3RoZXNlcyAjMS00KS4gQXMgaW4gSHlwb3RoZXNlcyAjMS00LCBpZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKyAoMSB8IHNpdGUvc3ViamVjdCkuIFdlIGNvbnNpZGVyIHRoZXNlIHRvIGJlIGNvbmZpcm1hdG9yeSB0ZXN0cywgYW5kIGluIGVhY2ggY2FzZSBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSB0d28td2F5IGludGVyYWN0aW9uIGJldHdlZW4g4oCcc2NvcmXigJ0gYW5kIHRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IG9uIOKAnHByZWRpY3RvcuKAnSAoY29tcGFyaW5nIHRoZSBwcmVkaWN0aXZlIHBvd2VyIG9mIG91ciBzY2FsZXMgb2YgaW50ZXJlc3QgdnMuIG91ciB0d28gY29udHJvbCBzY2FsZXMpIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSkuIgoKQWx0aG91Z2ggd2UgZGlkIG5vdCBudW1iZXIgdGhpcyBoeXBvdGhlc2lzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24sIEknbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2FsbCBpdCBIeXBvdGhlc2lzICM1LgoKYGBge3J9CmRfc3RkX2g1IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSwgaHRoaywgd29iKSAlPiUKICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSwgaHRoaywgd29iKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDUkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCl9OT1RFOiBOZWl0aGVyIG9mIHRoZSBtb2RlbHMgd2Ugc3BlY2lmaWVkIGluIHRoZSBwcmVyZWdpc3RyYXRpb24gd2VyZSBhYmxlIHRvIHJ1bi4gSSB0aGluayB0aGlzIGlzIGR1ZSB0byBhbiBlcnJvciBpbiBteSB0aGlua2luZyAoYWJvdXQgd2hpY2ggb2Ygb3VyIG1lYXN1cmVzIHdlcmUgInJlcGVhdGVkIG1lYXN1cmVzIikuIFRoZSBtb2RlbHMgcmVwb3J0ZWQgaGVyZSBhcmUgdmVyeSBjbG9zZSB0byB3aGF0IHdlIHByZXJlZ2lzdGVyZWQuXwoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGU6IAoKYGBge3J9CnI1X3NlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAic2UiKSkKIyBzdW1tYXJ5KHI1X3NlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNV9zZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUqKjogQXMgcHJlZGljdGVkLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGVzIGFib3ZlKSwgd2hldGhlciBpbmRleGVkIHNwaXJpdHVhbCBleHBlcmllbmNlcyB1c2luZyB0aGUgRFNFIG9yIFNFIHNjYWxlcy4gSW4gb3RoZXIgd29yZHMsIHRoZSAicHJlZGljdG9ycyBvZiBpbnRlcmVzdCIgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHdlcmUgYmV0dGVyIHByZWRpY3RvcnMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgdGhhbiBvdXIgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLgoKYGBge3J9Cmg1X3Bsb3RfYSA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYiA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9wbG90X2EsIGg1X3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYyA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gInNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfcGxvdF9kIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrIiwgIndvYiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogT3ZlcmFsbCAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIEV2ZW50cyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDVfcGxvdF9jLCBoNV9wbG90X2QsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjICJDb250cm9sIiBzY2FsZXMsIHdpdGhvdXQgcmV2ZXJzZSBjb2RpbmcKClRoZSB0d28gY29udHJvbCBzY2FsZXMgYXJlIHRoZSBvbmx5IHNjYWxlcyB0aGF0IGhhdmUgcmV2ZXJzZS1jb2RlZCBpdGVtcyEgVGhpcyBpcyByZWFsbHkgdG9vIGJhZCwgYmVjYXVzZSBpdCBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCBhY3R1YWxseSBnb29kIHdheXMgdG8gYXNzZXNzIGEgeWVzLWJpYXMuCgpJbiBhbiBhdHRlbXB0IHRvIHJlbWVkeSB0aGlzLCBoZXJlIEkgcmUtc2NvcmluZyB0aGVzZSBzY2FsZXMgYWZ0ZXIgX2Ryb3BwaW5nIHJldmVyc2UtY29kZWQgaXRlbXNfLgoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9jdGxfbm9yZXYgPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHN0YXJ0c193aXRoKCJwN19odGhrIiksIHN0YXJ0c193aXRoKCJwN193b2IiKSwKICAgICAgICAgLWMoZW5kc193aXRoKCJfY2F0IiksIGVuZHNfd2l0aCgiX3RvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgc2VsZWN0KC1jKGNvbnRhaW5zKCJyZXZlcnNlIikpKSAlPiUgIyBkcm9wIFExLCBRMiwgUTMsIFE0IGZyb20gd29iIAogIHNlbGVjdCgtYyhwN19odGhrX25vdC5mdW4sIHA3X2h0aGtfbGlsLmNoYWxsZW5nLCBwN19odGhrX2F2b2lkLnRoaW5rLAogICAgICAgICAgICBwN19odGhrX2hyZC5oYXYudG8sIHA3X2h0aGtfc21hbC5kYWlseSwgcDdfaHRoa19saWwudGhvdWdodCwKICAgICAgICAgICAgcDdfaHRoa19ub3QuZXhjaXRpbmcsIHA3X2h0aGtfbWVudGFsLmVmZnJ0LCBwN19odGhrX2pvYi5kb25lKSkgJT4lICMgZHJvcCBRMywgUTQsIFE1LCBRNywgUTgsIFE5LCBRMTIsIFExNiwgUTE3IGZyb20gaHRoawogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBpZmVsc2UoZ3JlcGwoImh0aGsiLCBxdWVzdGlvbiksICJodGhrIiwKICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCJ3b2IiLCBxdWVzdGlvbiksICJ3b2IiLCBOQSkpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCBzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBtdXRhdGUoc2NvcmVfbm9yZXZfc3RkID0gc2NhbGUoc2NvcmVfbm9yZXYsIHNjYWxlID0gVCkpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpkX3N0ZF9oNV9ub3JldiA8LSBmdWxsX2pvaW4oCiAgZF9zdGQgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICAgIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSksCiAgZnVsbF9qb2luKAogICAgZF9zdGQgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkgJT4lCiAgICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSkpLAogICAgZF9jdGxfbm9yZXYgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlLCBzY29yZV9ub3Jldl9zdGQpICU+JQogICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiaHRoa19ub3JldiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJ3b2Jfbm9yZXYiKSkgJT4lCiAgICAgIHJlbmFtZShwcmVkaWN0b3IgPSBzY2FsZSwKICAgICAgICAgICAgIHNjb3JlID0gc2NvcmVfbm9yZXZfc3RkKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6IAoKYGBge3J9CnI1X25vcmV2X2RzZSA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBwN19jdHJ5LCAKICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2ICU+JSBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpKQojIHN1bW1hcnkocjVfbm9yZXZfZHNlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNV9ub3Jldl9kc2UpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygxMSwgYm9sZCA9IFQpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGU6IAoKYGBge3J9CnI1X25vcmV2X3NlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3JldiAlPiUgZmlsdGVyKHNjYWxlID09ICJzZSIpKQojIHN1bW1hcnkocjVfbm9yZXZfc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X25vcmV2X3NlKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMTEsIGJvbGQgPSBUKQpgYGAKCkFnYWluLCBpbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUqKjogQXMgcHJlZGljdGVkLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGVzIGFib3ZlKSwgd2hldGhlciBpbmRleGVkIHNwaXJpdHVhbCBleHBlcmllbmNlcyB1c2luZyB0aGUgRFNFIG9yIFNFIHNjYWxlcy4gSW4gb3RoZXIgd29yZHMsIHRoZSAicHJlZGljdG9ycyBvZiBpbnRlcmVzdCIgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHdlcmUgYmV0dGVyIHByZWRpY3RvcnMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgdGhhbiBvdXIgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLCBldmVuIHdoZW4gd2Ugb25seSBpbmNsdWRlZCB0aGUgbm9uLXJldmVyc2UtY29kZWQgaXRlbXMgZnJvbSB0aGUgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLgoKYGBge3J9Cmg1X25vcmV2X3Bsb3RfYSA8LSBkX3N0ZF9oNV9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9iIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogT3ZlcmFsbCAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDVfbm9yZXZfcGxvdF9hLCBoNV9ub3Jldl9wbG90X2IsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2MgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9kIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9ub3Jldl9wbG90X2MsIGg1X25vcmV2X3Bsb3RfZCwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIEluIGVhY2ggc2l0ZSBjb25zaWRlcmVkIGFsb25lCgpIZXJlIEkgY29uZHVjdCBhIHNldCBvZiBwYXJhbGxlbCBhbmFseXNlcywgY29uc2lkZXJpbmcgZWFjaCBzaXRlIGFsb25lLgoKYGBge3J9CmRfY3RsX25vcmV2X2J5c2l0ZSA8LSBkMCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3Viaiwgc3RhcnRzX3dpdGgoInA3X2h0aGsiKSwgc3RhcnRzX3dpdGgoInA3X3dvYiIpLAogICAgICAgICAtYyhlbmRzX3dpdGgoIl9jYXQiKSwgZW5kc193aXRoKCJfdG90YWwiKSwgY29udGFpbnMoImNoZWNrIikpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoInJldmVyc2UiKSkpICU+JSAjIGRyb3AgUTEsIFEyLCBRMywgUTQgZnJvbSB3b2IgCiAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bywgcDdfaHRoa19zbWFsLmRhaWx5LCBwN19odGhrX2xpbC50aG91Z2h0LAogICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgIyBkcm9wIFEzLCBRNCwgUTUsIFE3LCBROCwgUTksIFExMiwgUTE2LCBRMTcgZnJvbSBodGhrCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGlmZWxzZShncmVwbCgiaHRoayIsIHF1ZXN0aW9uKSwgImh0aGsiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIndvYiIsIHF1ZXN0aW9uKSwgIndvYiIsIE5BKSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9ub3Jldl9zdGQgPSBzY2FsZShzY29yZV9ub3Jldiwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfc3RkX2g1X25vcmV2X2J5c2l0ZSA8LSBmdWxsX2pvaW4oCiAgZF9zdGRfYnlzaXRlICU+JQogICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSkgJT4lCiAgICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpLAogIGZ1bGxfam9pbigKICAgIGRfc3RkX2J5c2l0ZSAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICAgICAgZ2F0aGVyKHByZWRpY3Rvciwgc2NvcmUsIGMoYWJzLCBwb3IsIG1tKSksCiAgICBkX2N0bF9ub3Jldl9ieXNpdGUgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlLCBzY29yZV9ub3Jldl9zdGQpICU+JQogICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiaHRoa19ub3JldiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJ3b2Jfbm9yZXYiKSkgJT4lCiAgICAgIHJlbmFtZShwcmVkaWN0b3IgPSBzY2FsZSwKICAgICAgICAgICAgIHNjb3JlID0gc2NvcmVfbm9yZXZfc3RkKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3Jldl9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3Jldl9ieXNpdGUkcHJlZGljdG9yKSA8LSBjYmluZCgKICBpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgYWJzX3BtbSA9IGMoMiwgMCwgLTEsIC0xLCAwKSwKICBwb3JfbW0gPSBjKDAsIDAsIC0xLCAxLCAwKSwKICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIGZvciB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlOgoKYGBge3J9CnI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX2doIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfZHNlX2doKQoKcjVfYnlzaXRlX25vcmV2X2RzZV90aCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV90aCkKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfY2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfY2gpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX3Z0IDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDEwKSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDExLCAyMCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAyMSwgMzApICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMzEsIDQwKSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNDEsIDUwKSAlPiUKICByb3dfc3BlYyhjKHNlcSg3LCA0NywgMTApKSwgYm9sZCA9IFQpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgZm9yIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6CgpgYGB7cn0KcjVfYnlzaXRlX25vcmV2X3NlX3VzIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdXMpCgpyNV9ieXNpdGVfbm9yZXZfc2VfZ2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9naCkKCnI1X2J5c2l0ZV9ub3Jldl9zZV90aCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3RoKQoKcjVfYnlzaXRlX25vcmV2X3NlX2NoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfY2gpCgpyNV9ieXNpdGVfbm9yZXZfc2VfdnQgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgMTEsIDIwKSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDIxLCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAzMSwgNDApICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCA0MSwgNTApICU+JQogIHJvd19zcGVjKGMoc2VxKDcsIDQ3LCAxMCkpLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUgaW4gYWxtb3N0IGFsbCBzaXRlcyoqOiBJbiBtb3N0IHNpdGVzLCBhcyBwcmVkaWN0ZWQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gInNjb3JlIiBhbmQgdGhlIGZpcnN0IGNvbnRyYXN0IG9uIHRoZSAicHJlZGljdG9yIiBwYXJhbWV0ZXIgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMsIGV2ZW4gd2hlbiB3ZSBvbmx5IGluY2x1ZGVkIHRoZSBub24tcmV2ZXJzZS1jb2RlZCBpdGVtcyBmcm9tIHRoZSB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgdG8gdGhpcyB3ZXJlIEdoYW5hIHdoZW4gdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAoZmlyc3QgdGFibGUgYWJvdmUpLCBhbmQgVmFudWF0dSB3aGVuIHVzaW5nIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChzZWNvbmQgdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJkc2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC44LCBpbmNsdWRlID0gVH0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpLAogICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgZmlsbCA9IHByZWRfdHlwZSwgY29sb3IgPSBwcmVkX3R5cGUpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhzY2FsZSksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKGFlcyhmaWxsID0gcHJlZF90eXBlLCBjb2xvciA9IHByZWRfdHlwZSksCiAgICAgICAgICAgICAgbWV0aG9kID0gImxtIiwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2Rpc2NyZXRlKCkgKwogIHNjYWxlX2ZpbGxfZGlzY3JldGUoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciB0eXBlIiwgZmlsbCA9ICJQcmVkaWN0b3IgdHlwZSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBCZXlvbmQgdGhlIHByZXJlZ2lzdHJhdGlvbgoKIyMgQ29tYmluZWQgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBvbiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKGFic29ycHRpb24gY29udHJvbGxpbmcgZm9yIHBvcm9zaXR5ICYgdmljZSB2ZXJzYSkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKSGVyZSBJIGV4YW1pbmUgYSBiaWcgbW9kZWwsIGluIHdoaWNoIGJvdGggYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHkgdG9nZXRoZXIgcHJlZGljdCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGxvb2sgYXQgdGhlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGNvbnRyb2xsaW5nIGZvciBwb3Jvc2l0eSwgdGhlIGVmZmVjdCBvZiBwb3Jvc2l0eSBjb250cm9sbGluZyBmb3IgYWJzb3JwdGlvbiwgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LiBJIGxvb2sgYXQgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSBhbmQgYXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNlcGFyYXRlbHksIGFuZCB1c2UgYm90aCB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2UgYW5kIFNwaXJpdHVhbCBFdmVudHMgc2NhbGVzIHRvIGluZGV4IHNwaXJpdHVhbCBleHBlcmllbmNlLgoKYGBge3J9CmRfc3RkX2g2IDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X2N0cnksIHNjYWxlKSwgZnVucyhmYWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g2JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g2JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOiAKCmBgYHtyfQpyNl9wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcDdfY3RyeSAqIHNjYWxlIAogICAgICAgICAgICAgICArICgxIHwgcDdfc3ViaiksIGRfc3RkX2g2KQojIHN1bW1hcnkocjZfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNl9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgOSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyNl9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9zdGRfaDYpCiMgc3VtbWFyeShyNl9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjZfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgOSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2Ugc2VlIGV2aWRlbmNlIGZvciBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBiZWluZyBwb3NpdGl2ZWx5IHJlbGF0ZWQgdG8gc3Bpcml0dWFsIGV4cGVyaWVuY2VzIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIqKjogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlLCBjb250cm9sbGluZyBmb3IgcG9yb3NpdHk7IGFuZCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IChhcyBpbmRleGVkIGJ5IGVpdGhlciB0aGUgRHVsaW4gc2NhbGUgb3IgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBhbHNvIHNpZ25pZmljYW50bHkgcG9zaXRpdmUsIGNvbnRyb2xsaW5nIGZvciBhYnNvcnB0aW9uLiBUaGVyZSB3YXMgbm8gc3Ryb25nIGV2aWRlbmNlIG9mIGFuIGludGVyYWN0aXZlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiBlaXRoZXIgY2FzZSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuCgpgYGB7cn0KaDZfcGxvdF9hMSA8LSBkX3N0ZF9oNiAlPiUKICBhcnJhbmdlKGV4cGVyaWVuY2UpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IHBvciwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IxIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gcG9yLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gRn0KcGxvdF9ncmlkKHBsb3RfZ3JpZChoNl9wbG90X2ExICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgaDZfcGxvdF9iMSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHMgPSBjKDIsIDEpKSwKICAgICAgICAgIGdldF9sZWdlbmQoaDZfcGxvdF9hMSksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYTIgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBtbSwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUiLAogICAgICAgeSA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IyIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gbW0sIGNvbG9yID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiTWFydGhhIFN0b3J5IHNjb3JlIiwKICAgICAgIGNvbG9yID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IEZ9CnBsb3RfZ3JpZChwbG90X2dyaWQoaDZfcGxvdF9hMiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIGg2X3Bsb3RfYjIgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICByZWxfd2lkdGhzID0gYygyLCAxKSksCiAgICAgICAgICBnZXRfbGVnZW5kKGg2X3Bsb3RfYTIpLAogICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQpgYGAKCiMjIyBJbiBlYWNoIHNpdGUgY29uc2lkZXJlZCBhbG9uZQoKSGVyZSBJIGNvbmR1Y3QgYSBzZXQgb2YgcGFyYWxsZWwgYW5hbHlzZXMsIGNvbnNpZGVyaW5nIGVhY2ggc2l0ZSBhbG9uZS4KCmBgYHtyfQpkX3N0ZF9oNl9ieXNpdGUgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBhYnMsIHBvciwgbW0pKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19jdHJ5LCBzY2FsZSksIGZ1bnMoZmFjdG9yKSkKCmNvbnRyYXN0cyhkX3N0ZF9oNl9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDZfYnlzaXRlJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOiAKCmBgYHtyfQpyNl9ieXNpdGVfcG9yX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl91cykKCnI2X2J5c2l0ZV9wb3JfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2doKQoKcjZfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdGgpCgpyNl9ieXNpdGVfcG9yX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl9jaCkKCnI2X2J5c2l0ZV9wb3JfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDgpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgOSwgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMTcsIDI0KSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDI1LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDMzLCA0MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMzQsIDgpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDM1LCA4KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyNl9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV91cykKCnI2X2J5c2l0ZV9tbV9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX2doKQoKcjZfYnlzaXRlX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdGgpCgpyNl9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9jaCkKCnI2X2J5c2l0ZV9tbV92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI2X2J5c2l0ZV9tbV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfbW1fdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA4KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDksIDE2KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDE3LCAyNCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAyNSwgMzIpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAzMywgNDApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDM0LCA4KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSgzLCAzNSwgOCkpLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIHNlZSBzb21lIGV2aWRlbmNlIGZvciBwb3Jvc2l0eSAic3dhbXBpbmcgb3V0IiB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gaW4gc29tZSBzaXRlcyoqLCBpbmNsdWRpbmcgR2hhbmEsIENoaW5hLCBhbmQgVmFudWF0dSB3aGVuIHBvcm9zaXR5IGlzIGluZGV4ZWQgYnkgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGU7IGFuZCB0aGUgVVMsIEdoYW5hLCBhbmQgVmFudWF0dSB3aGVuIHBvcm9zaXR5IGlzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSAoaW4gZmFjdCwgaW4gdGhpcyBzZWNvbmQgc2V0IG9mIGFuYWx5c2VzLCBuZWl0aGVyIEFic29ycHRpb24gbm9yIE1hcnRoYSBTdG9yeSBlbmRzIHVwIGJlaW5nIGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIGluIEdoYW5hIG9yIFZhbnVhdHUpLgoKYGBge3J9CiMgcGFydGlhbCBjb3JyZWxhdGlvbnMKZF9zdGRfaDYgJT4lCiAgc3ByZWFkKHNjYWxlLCBleHBlcmllbmNlKSAlPiUKICBzZWxlY3QocDdfc3ViaiwgYWJzLCBwb3IsIGRzZSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygicDdfc3ViaiIpICU+JQogIHBhcnRpYWwucigpCgpkX3N0ZF9oNiAlPiUKICBzcHJlYWQoc2NhbGUsIGV4cGVyaWVuY2UpICU+JQogIHNlbGVjdChwN19zdWJqLCBhYnMsIHBvciwgc2UpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInA3X3N1YmoiKSAlPiUKICBwYXJ0aWFsLnIoKQpgYGAKCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBBYnNvcnB0aW9uIGFzIHByaW1hcmlseSBpbmRpdmlkdWFsIGRpZmZlcmVuY2UsIHBvcm9zaXR5IGFzIHByaW1hcmlseSBjdWx0dXJhbCBkaWZmZXJlbmNlPwoKSW4gb3VyIHRoZW9yaXppbmcsIHdlIG9mdGVuIGFzc3VtZSB0aGF0IGFic29ycHRpb24gaXMgcHJpbWFyaWx5IGFuIGluZGl2aWR1YWwgZGlmZmVyZW5jZSwgd2hpbGUgcG9yb3NpdHkgaXMgcHJpbWFyaWx5IGEgY3VsdHVyYWwgZGlmZmVyZW5jZeKAlG9yIGF0IGxlYXN0IHRoYXQgYWJzb3JwdGlvbiBpcyBtb3JlIG9mIGFuIGluZGl2aWR1YWwgZGlmZmVyZW5jZSB0aGFuIGlzIHBvcm9zaXR5LiBEbyB3ZSBzZWUgYW55IGV2aWRlbmNlIG9mIHRoaXMgaW4gdGhpcyBkYXRhc2V0PwoKIyMjIERvIGluZGl2aWR1YWxzIHZhcnkgbW9yZSBpbiBhYnNvcnB0aW9uIHRoYW4gcG9yb3NpdHk/CgpUaGUgZmlyc3Qgd2F5IEkgdGhvdWdodCBvZiB0byBhcHByb2FjaCB0aGlzIHF1ZXN0aW9uIGlzIHRvIGxvb2sgYXQgdGhlIGRlZ3JlZSB0byB3aGljaCBpbmRpdmlkdWFscyB2YXJ5IGluIGVhY2ggb2YgdGhlc2UgdGhyZWUgc2NhbGVzIChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KS4gV2Ugd291bGQgcHJlZGljdCB0aGF0IGFic29ycHRpb24gd291bGQgdmFyeSBtb3JlIGFjcm9zcyBpbmRpdmlkdWFscyB0aGFuIGVpdGhlciBvZiB0aGUgcG9yb3NpdHkgaW5kaWNlcyAoYWZ0ZXIgcmVzY2xhaW5nIGFsbCB0aHJlZWUgc2NhbGVzIHRvIGhhdmUgdGhlIHNhbWUgcmFuZ2UsIHdpdGhpbiBlYWNoIHNpdGUpLgoKYGBge3J9CmRfdmFyX2J5c2l0ZSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsKSAlPiUKICBtdXRhdGVfYXQodmFycyhjb250YWlucygidG90YWwiKSksIAogICAgICAgICAgICBmdW5zKHNjYWxlczo6cmVzY2FsZSguLCB0byA9IGMoMCwgMSkpKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgYyhwN19hYnNfdG90YWwsIHA3X3Bvcl90b3RhbCwgcDdfbW1fdG90YWwpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGZhY3RvcihzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlLCBwN19jdHJ5KSAlPiUKICBtdXRhdGUoc2NvcmUgPSBzY2FsZShzY29yZSwgc2NhbGUgPSBGKSkgJT4lICMgY2VudGVyIGF0IDAKICB1bmdyb3VwKCkKYGBgCgoKYGBge3IsIGluY2x1ZGUgPSBGfQpwcmludCgiQWJzb3JwdGlvbiB2cy4gUG9yb3NpdHkgKER1bGluKSIpCnByaW50KCJPdmVyYWxsIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIpKQpwcmludCgiVVMiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJHaGFuYSIpKQoKcHJpbnQoIlRoYWlsYW5kIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCgpwcmludCgiQ2hpbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnByaW50KCJBYnNvcnB0aW9uIHZzLiBNYXJ0aGEgU3RvcnkiKQpwcmludCgiT3ZlcmFsbCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iKSkKcHJpbnQoIlVTIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJVUyIpKQoKcHJpbnQoIkdoYW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJHaGFuYSIpKQoKcHJpbnQoIlRoYWlsYW5kIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQoKcHJpbnQoIkNoaW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJDaGluYSIpKQoKcHJpbnQoIlZhbnVhdHUiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gInBvciIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnByaW50KCJEdWxpbiB2cy4gTWFydGhhIFN0b3J5IikKcHJpbnQoIk92ZXJhbGwiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIikpCnByaW50KCJVUyIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKCnByaW50KCJUaGFpbGFuZCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKCnByaW50KCJDaGluYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJhYnMiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3J9CmRfdmFyX2J5c2l0ZSAlPiUKICBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgc3VtbWFyaXNlKHZhcmlhbmNlID0gcm91bmQodmFyKHNjb3JlLCBuYS5ybSA9IFQpLCAzKSkgJT4lCiAgYXJyYW5nZShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCB2YXJpYW5jZSkKYGBgCgpBY2NvcmRpbmcgdG8gQmFydGxldHQgdGVzdHMgb2YgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2VzLCB0aGUgb25seSBzaXRlIHdoZXJlIHdlIHNlZSB0aGUgcGF0dGVybiB0aGF0IHdlJ2QgZXhwZWN0IGlzIFZhbnVhdHU6IEluZGl2aWR1YWxzIGRpZmZlcmVkIHNpZ25pZmljYW50bHkgbW9yZSBpbiB0aGVpciBBYnNvcnB0aW9uIHNjb3JlcyB0aGFuIGluIHRoZWlyIFBvcm9zaXR5IChEdWxpbikgc2NvcmVzIG9yIE1hcnRoYSBTdG9yeSBzY29yZXMuIEluIENoaW5hLCBpbmRpdmlkdWFscyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IG1vcmUgaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBNYXJ0aGEgU3Rvcnkgc2NvcmVzLCBidXQgdmFyaWFuY2Ugd2FzIGVxdWFsIGFjcm9zcyB0aGUgQWJzb3JwdGlvbiBhbmQgUG9yb3NpdHkgc2NvcmVzLiBJbiBHaGFuYSwgd2UgYWN0dWFsbHkgc2F3IHRoZSByZXZlcnNlIHBhdHRlcm4gdG8gd2hhdCB3ZSdkIGV4cGVjdDogSW5kaXZpZHVhbHMgZGlmZmVyZWQgc2lnbmlmaWNhbnRseSBfbGVzc18gaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBNYXJ0aGEgU3Rvcnkgc2NvcmVzIChhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gQWJzb3JwdGlvbiBhbmQgUG9yb3NpdHkgKER1bGluKSBhbHNvIHdlbnQgaW4gdGhlIHNhbWUgZGlyZWN0bHksIGFsdGhvdWdoIGl0IHdhcyBub3Qgc2lnbmlmaWNhbnQpLgoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjMsIGluY2x1ZGUgPSBGfQpkX3Zhcl9ieXNpdGUgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgY29sb3IgPSBzY2FsZSwgZmlsbCA9IHNjYWxlKSkgKwogIGZhY2V0X3dyYXAofiBwN19jdHJ5LCBzY2FsZXMgPSAiZnJlZSIsIG5jb2wgPSA1KSArCiAgZ2VvbV9kZW5zaXR5KHBvc2l0aW9uID0gImlkZW50aXR5IiwgYWxwaGEgPSAwLjIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMiLAogICAgICAgeCA9ICJTY29yZSAoYWRqdXN0ZWQgdG8gc2hhcmUgY29tbW9uIHJhbmdlIGFuZCBiZSBjZW50ZXJlZCBhdCAwLCB3aXRoaW4gZWFjaCBzaXRlKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiLAogICAgICAgY29sb3IgPSAiU2NhbGUiLCBmaWxsID0gIlNjYWxlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuMywgaW5jbHVkZSA9IFR9CmRfdmFyX2J5c2l0ZSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKHZhcmlhbmNlID0gdmFyKHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIFN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjYWxlLCB5ID0gdmFyaWFuY2UsIGNvbG9yID0gc2NhbGUpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX3BvaW50KHNob3cubGVnZW5kID0gRiwgc2l6ZSA9IDMpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhbmNlIGJ5IHNjYWxlIGFuZCBzaXRlIiwKICAgICAgIHggPSAiU2NhbGUiLCB5ID0gIlZhcmlhbmNlIChhZnRlciBhZGp1c3Rpbmcgc2NvcmVzXG50byBzaGFyZSBjb21tb24gcmFuZ2UgYW5kXG5iZSBjZW50ZXJlZCBhdCAwLCB3aXRoaW4gZWFjaCBzaXRlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgaXMgX25vXyBzdHJvbmcgZXZpZGVuY2UgZnJvbSB0aGVzZSBhbmFseXNlcyBvZiBob21vZ2VuZWl0eSBvZiB2YXJpYW5jZSB0aGF0IGluZGl2aWR1YWxzICh3aXRoaW4gYSBzaXRlKSB2YXJpZWQgbW9yZSBpbiBhYnNvcnB0aW9uIHRoYW4gaW4gcG9yb3NpdHkuKioKCiMjIyBEbyBzaXRlIGRpZmZlcmVuY2VzIGFjY291bnQgZm9yIG1vcmUgb2YgdGhlIHZhcmlhbmNlIGluIHBvcm9zaXR5IHRoYW4gaW4gYWJzb3JwdGlvbj8KClRoZSBzZWNvbmQgd2F5IEkgdGhvdWdodCBvZiB0byBhcHByb2FjaCB0aGlzIHF1ZXN0aW9uIGlzIHRvIGxvb2sgYXQgdGhlIGFtb3VudCBvZiB2YXJpYW5jZSBleHBsYWluZWQgYnkgc2l0ZSBkaWZmZXJlbmNlcyBmb3IgaW4gZWFjaCBvZiB0aGVzZSB0aHJlZSBzY2FsZXMgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpLiBXZSB3b3VsZCBwcmVkaWN0IHRoYXQgc2l0ZSBkaWZmZXJlbmNlcyB3b3VsZCBleHBsYWluIG1vcmUgb2YgdGhlIHZhcmlhbmNlIGluIHBvcm9zaXR5IHRoYW4gaW4gYWJzb3JwdGlvbiAobm8gcmVzY2FsaW5nIG5lY2Vzc2FyeSBoZXJlKS4KCmBgYHtyfQpyN19hYnMgPC0gbG0ocDdfYWJzX3RvdGFsIH4gcDdfY3RyeSwgCiAgICAgICAgICAgICBkMCAlPiUgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsKSwKICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9ICJjb250ci5zdW0iKSkKCnI3X3BvciA8LSBsbShwN19wb3JfdG90YWwgfiBwN19jdHJ5LCAKICAgICAgICAgICAgIGQwICU+JSBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChwN19jdHJ5ID0gImNvbnRyLnN1bSIpKQoKcjdfbW0gPC0gbG0ocDdfbW1fdG90YWwgfiBwN19jdHJ5LCAKICAgICAgICAgICAgZDAgJT4lIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X21tX3RvdGFsKSwKICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChwN19jdHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCk51bWVyaWNhbGx5IHNwZWFraW5nLCAqKnRoaXMgYXBwZWFycyB0byBiZSB0cnVlOiBJbiBhIHNldCBvZiBsaW5lYXIgbW9kZWxzLCBzaXRlIGRpZmZlcmVuY2VzIGV4cGxhaW4gb25seSBgciBzdW1tYXJ5KHI3X2Ficykkci5zcXVhcmVkICU+JSByb3VuZCgyKSAqIDEwMGAlIG9mIHRoZSB2YXJpYW5jZSBpbiBBYnNvcnB0aW9uIHNjb3JlcywgdnMuIGByIHN1bW1hcnkocjdfcG9yKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIFBvcm9zaXR5IChEdWxpbikgc2NvcmVzIGFuZCBgciBzdW1tYXJ5KHI3X21tKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIE1hcnRoYSBTdG9yeSBzY29yZXMuKioKCkhlcmUsIEknbGwgdHJ5IHRvIGNvbXBhcmUgdGhlc2Ugc3RhdGlzdGljYWxseSAodXNpbmcgc2NvcmVzIGZvciBlYWNoIHNjYWxlIHRoYXQgaGF2ZSBiZWVuIHN0YW5kYXJkaXplZCwgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CmRfaDdfY29tcGFyZSA8LSBkX3N0ZCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtc3RhcnRzX3dpdGgoInA3IikpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oN19jb21wYXJlJHA3X2N0cnkpIDwtIGNiaW5kKG5vblVTX1VTID0gYygtNCwgMSwgMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hWVF9USENIID0gYygwLCAxLCAtMSwgLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIX1ZUID0gYygwLCAxLCAwLCAwLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhfQ0ggPSBjKDAsIDAsIC0xLCAxLCAwKSkKY29udHJhc3RzKGRfaDdfY29tcGFyZSRzY2FsZSkgPC0gY2JpbmQocG1tX2FicyA9IGMoLTIsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3JfbW0gPSBjKDAsIC0xLCAxKSkKCnI3X2NvbXBhcmUgPC0gbG1lcihzY29yZSB+IHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfaDdfY29tcGFyZSkKIyBzdW1tYXJ5KHI3X2NvbXBhcmUpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI3X2NvbXBhcmUpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyg4OjExLCBib2xkID0gVCkKYGBgCgpUaGlzIGFuYWx5c2lzIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudDogSSB0aGluayB0aGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhhdCBJIGhhdmUgYm9sZGVkIGluIHRoZSB0YWJsZSBhYm92ZSBzdWdnZXN0IHRoYXQgdGhlIGRpZmZlcmVuY2VzIGFjcm9zcyBzaXRlcyAoaGVyZSwgY29kZWQgYXMgZGlmZmVyZW5jZXMgYmV0d2VlbiAoYSkgbm9uLVVTIGFuZCBVUyBzaXRlcywgKGIpIEdoYW5hIGFuZCBWYW51YXR1IHZzLiBUaGFpbGFuZCBhbmQgQ2hpbmEsIChjKSBHaGFuYSB2cy4gVmFudWF0dSwgYW5kIChkKSBUaGFpbGFuZCB2cy4gQ2hpbmEpIHdlcmUgZ2VuZXJhbGx5IGV4YWdnZXJhdGVkIGluIHRoZSB0d28gcG9yb3NpdHkgc2NhbGVzIGNvbXBhcmVkIHRvIHRoZSBBYnNvcnB0aW9uIHNjYWxlLCBhbmQgdGhlc2Ugc2VlbXMgdG8gYmUgdHJ1ZSBmcm9tIHRoZSBmb2xsb3dpbmcgcGxvdDoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZF9oN19jb21wYXJlICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCguIH4gc2NhbGUpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhYmlsaXR5IGFjcm9zcyBzaXRlcyBieSBzY2FsZSIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgX2lzXyBwcmV0dHkgc3Ryb25nIGV2aWRlbmNlIGZyb20gdGhlc2UgcmVzcmVzc2lvbiBhbmFseXNlcyB0aGF0IHNpdGUgZGlmZmVyZW5jZXMgYWNjb3VudGVkIGZvciBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24uKioKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgUmVsaWdpb3NpdHkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKRG8gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSwgb24gdGhlIG9uZSBoYW5kLCBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBzdGlsbCBob2xkIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIHBhcnRpY2lwYW50cycgc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eT8KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45fQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgICBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RlbV9ob3cuc3BydC5yZWxnLCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIiwgCiAgICAgICB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KZF9zdGRfcmVsaWcgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykgJT4lCiAgbXV0YXRlKHJlbGlnX3N0ZCA9IHNjYWxlKHA3X2RlbV9ob3cuc3BydC5yZWxnLCBzY2FsZSA9IFQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQpCgpkX2g4IDwtIGRfc3RkX3JlbGlnICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX2g4JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfaDgkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSAqIHA3X2N0cnkgKyAKICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCBkX2g4KQojIHN1bW1hcnkocjhfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyOjQsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpyOF9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHJlbGlnX3N0ZCAqIHNjYWxlICogcDdfY3RyeSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9oOCkKIyBzdW1tYXJ5KHI4X21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDI6NCwgYm9sZCA9IFQpCmBgYAoKRm9sbG93aW5nIG90aGVyIGFuYWx5c2lzLCBJIGV4YW1pbmVkIHRoaXMgc2VwYXJhdGVseSB1c2luZyBQb3Jvc2l0eSAoRHVsaW4pIGFuZCBNYXJ0aGEgU3RvcnkgYXMgaW5kaWNlcyBvZiBwb3Jvc2l0eS4gSW4gYm90aCBjYXNlcywgcmVsaWdpb3NpdHkgd2FzIGEgc2lnbmlmaWNhbnQgcG9zaXRpdmUgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIChhcyB3ZSdkIGV4cGVjdCkuIEJ1dCwgaW1wb3J0YW50bHksIHRoZSBtYWluIGVmZmVjdHMgb2YgcG9yb3NpdHkgcmVtYWluZWQgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBib3RoIGFuYWx5c2VzLCBldmVuIGFmdGVyIGNvbnRyb2xsaW5nIGZvciBwYXJ0aWNpcGFudHMnIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLiBUaGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiByZW1haW5lZCBzaWduaWZpY2FudGx5IHBvc2l0aXZlIHdoZW4gcG9yb3NpdHkgd2FzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSAoc2Vjb25kIHRhYmxlKSwgYnV0IG5vdCB3aGVuIHBvcm9zaXR5IHdhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoaXMgZWZmZWN0IHRvIGJlICJtYXJnaW5hbGx5IHNpZ25pZmljYW50IikuCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgcmVsaWdpb3NpdHkgZG9lcyBfbm90XyBmdWxseSAiZXhwbGFpbiBhd2F5IiB0aGUgb2JzZXJ2ZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LCBvbiB0aGUgb25lIGhhbmQsIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgb24gdGhlIG90aGVyLioqCgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpICU+JQogIG11dGF0ZShyZWxpZ19zdGQgPSBzY2FsZShwN19kZW1faG93LnNwcnQucmVsZywgc2NhbGUgPSBUKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSkKCmRfaDhfYnlzaXRlIDwtIGRfc3RkX2J5c2l0ZV9yZWxpZyAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oOF9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9oOF9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X2J5c2l0ZV9wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpCgpyOF9ieXNpdGVfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2doKQoKcjhfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjhfYnlzaXRlX3Bvcl90aCkKCnI4X2J5c2l0ZV9wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpCgpyOF9ieXNpdGVfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyOF9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdXMpCgpyOF9ieXNpdGVfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpCgpyOF9ieXNpdGVfbW1fdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdGgpCgpyOF9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fY2gpCgpyOF9ieXNpdGVfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjhfYnlzaXRlX21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjhfYnlzaXRlX21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkkgc2VlIHR3byBnZW5lcmFsIHBhdHRlcm5zIGhlcmU6CgoxLiBJbiB0aGUgVVMsIFRoYWksIGFuZCBDaGluZXNlIHNhbXBsZXMsIGFic29ycHRpb24sIHBvcm9zaXR5LCBhbmQgcmVsaWdpb3NpdHkgYWxsIHJlbWFpbiBzaWduaWZpY2FudCBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHdoZW4gY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIgaW4gb25lIG9mIHRoZSB0d28gYW5hbHlzZXMgcmVwb3J0ZWQgYWJvdmUuIEluIHRoZSBvdGhlciBhbmFseXNpcywgdGhlcmUgaXMgc29tZSBldmlkZW5jZSBmb3IgInN3YW1waW5nIG91dCI6IEluIHRoZSBVUyBhbmQgQ2hpbmVzZSBzYW1wbGVzLCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzOyBhbmQgaW4gVGhhaWxhbmQsIHRoZSBlZmZlY3Qgb2YgcG9yb3NpdHkgYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRob3VnaCwgKipJJ2Qgc2F5IHRoaXMgaXMgbW9kZXJhdGUgZXZpZGVuY2UgdGhhdCByZWxpZ2lvc2l0eSBkb2VzIF9ub3RfIGZ1bGx5ICJleHBsYWluIGF3YXkiIHRoZSBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGluIHRoZXNlIHRocmVlIHNpdGVzICh0aGUgVVMsIFRoYWlsYW5kLCBhbmQgQ2hpbmEpLioqCjIuIEluIEdoYW5hIGFuZCBWYW51YXR1LCBvbmx5IHJlbGlnaW9zaXR5IHJlbWFpbnMgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgaW4gdGhlc2UgYW5hbHlzZXMuICoqVGhpcyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBldmlkZW5jZSB0aGF0IHJlbGlnaW9zaXR5IF9kb2VzXyAiZXhwbGFpbiBhd2F5IiB0aGUgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiB0aGVzZSB0d28gKGRldm91dGx5IENocmlzdGlhbikgc2l0ZXMgKEdoYW5hIGFuZCBWYW51YXR1KS4qKgoKVG8gaGVscCB3aXRoIG91ciBpbnRlcnByZXRhdGlvbiwgaGVyZSBhcmUgdGhlIGNvcnJlbGF0aW9ucyB3aXRoIHJlbGlnaW9zaXR5LCB0aGlzIHRpbWUgbG9va2luZyBhdCBzY29yZXMgc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGU6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnX2NvciA8LSBkX3N0ZF9ieXNpdGVfcmVsaWcgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcmVsaWdfc3RkLCBhYnMsIHBvciwgbW0sIGRzZSwgc2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShhYnMgPSBjb3IocmVsaWdfc3RkLCBhYnMsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgcG9yID0gY29yKHJlbGlnX3N0ZCwgcG9yLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIG1tID0gY29yKHJlbGlnX3N0ZCwgbW0sIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgZHNlID0gY29yKHJlbGlnX3N0ZCwgZHNlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIHNlID0gY29yKHJlbGlnX3N0ZCwgc2UsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBjb3JfcmVsaWcsIC1wN19jdHJ5KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX3JlbGlnICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHJlbGlnX3N0ZCwgYWJzLCBwb3IsIG1tLCBkc2UsIHNlKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCByZWxpZ19zdGQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGRfYnlzaXRlX3JlbGlnX2NvcikgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHJlbGlnX3N0ZCwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlLCBjb3JfcmVsaWcpICU+JSAKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1pbl94ID0gbWluKHJlbGlnX3N0ZCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1heF95ID0gbWF4KHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUgCiAgICAgICAgICAgICAgIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoeCA9IG1pbihtaW5feCkpICU+JQogICAgICAgICAgICAgICBncm91cF9ieShzY2FsZSkgJT4lCiAgICAgICAgICAgICAgIG11dGF0ZSh5ID0gbWF4KG1heF95KSkgJT4lCiAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiciA9ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChyb3VuZChjb3JfcmVsaWcsIDIpLCBuc21hbGwgPSAyKSksCiAgICAgICAgICAgICAgICAgeCA9IHgsIHkgPSB5KSwKICAgICAgICAgICAgIGhqdXN0ID0gMCwgdmp1c3QgPSAxLCBhbHBoYSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLCAKICAgICAgIHkgPSAiU2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBXaGljaCBleHBlcmllbmNlcyBhcmUgcHJlZGljdGVkIGJ5IGFic29ycHRpb24gdnMuIHBvcm9zaXR5PwoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9leHAgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKICBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGUoLiwgc2NhbGUgPSBUKSkpIAogICMgIyByZXNjYWxlIGV2ZXJ5dGhpbmcgdG8gcnVuIGZyb20gMC0xCiAgIyBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGVzOjpyZXNjYWxlKC4sIHRvID0gYygwLCAxKSkpKQpgYGAKCmBgYHtyfQpkX2V4cF9jb3IgPC0gZF9leHAgJT4lIAogIHNlbGVjdChwN19zdWJqLCBwN19hYnNfdG90YWwsIAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfYWJzX3RvdGFsKSkgJT4lCiAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShhYnNfY29yID0gY29yKHA3X2Fic190b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSAlPiUKICBmdWxsX2pvaW4oZF9leHAgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChwN19zdWJqLCBwN19wb3JfdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfcG9yX3RvdGFsKSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3JfY29yID0gY29yKHA3X3Bvcl90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0ZW4gbW9zdCBzdHJvbmdseSBjb3JyZWxhdGVkIGl0ZW1zIGZvciBlYWNoIG9mIG91ciB0aHJlZSBwcmVkaWN0b3JzIG9mIGludGVyZXN0IChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KToKCmBgYHtyLCBpbmNsdWRlID0gVH0KYmluZF9yb3dzKGRfZXhwX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigxMCwgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgZF9leHBfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpKSAlPiUKICBhcnJhbmdlKHdoaWNoX2NvciwgZGVzYyhhYnMoY29yKSkpICU+JQogIHNlbGVjdChjb3IsIHF1ZXN0aW9uX3RleHQsIHNjYWxlKSAlPiUKICByZW5hbWUoQ29ycmVsYXRpb24gPSBjb3IsIGBRdWVzdGlvbiB0ZXh0YCA9IHF1ZXN0aW9uX3RleHQsIFNjYWxlID0gc2NhbGUpICU+JQogIGthYmxlKGRpZ2l0cyA9IDMpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJBYnNvcnB0aW9uIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIlBvcm9zaXR5IChEdWxpbikiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIk1hcnRoYSBTdG9yeSIsIDIxLCAzMCkKYGBgCgpBbmQgaGVyZSdzIGEgdmlzdWFsaXphdGlvbiBvZiB0aGUgY29ycmVsYXRpb25zIG9mIHRoZXNlIHRocmVlIHByZWRpY3RvcnMgd2l0aCBhbGwgImV4cGVyaWVuY2UiIGl0ZW1zIGluIHRoaXMgcGFja2V0IChzcGlyaXR1YWwgYW5kIHNlY3VsYXIpOgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfZXhwX2NvciAlPiUKICAgICAgICAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA4MCkpLAogICAgICAgYWVzKHggPSBjb3IsIHkgPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIGRlc2Mob3JkZXIpKSwgCiAgICAgICAgICAgY29sb3IgPSB3aGljaF9jb3IpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IC4sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnMoeCA9ICJQZWFyc29uIGNvcnJlbGF0aW9uICh0aGVvcmV0aWNhbCByYW5nZTogLTEgdG8gMSkiLAogICAgICAgeSA9ICJRdWVzdGlvbiAoYnkgc2NhbGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciIpCmBgYAoKIyMjIENvbnNpZGVyaW5nIGVhY2ggc2l0ZSBpbmRpdmlkdWFsbHkKCmBgYHtyfQpkX2V4cF9ieXNpdGUgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgd2l0aGluIGVhY2ggc2l0ZQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZSguLCBzY2FsZSA9IFQpKSkgJT4lCiAgIyAjIHJlc2NhbGUgZXZlcnl0aGluZyB0byBydW4gZnJvbSAwLTEKICAjIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfZXhwX2J5c2l0ZV9jb3IgPC0gZF9leHBfYnlzaXRlICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UoYWJzX2NvciA9IGNvcihwN19hYnNfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwX2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfZHNlXyIpLCBjb250YWlucygiX3NlXyIpLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl91bmV2XyIpLCBjb250YWlucygiX2V4c2VuXyIpKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcl9jb3IgPSBjb3IocDdfcG9yX3RvdGFsLCByZXNwb25zZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBmdWxsX2pvaW4oZF9leHBfYnlzaXRlICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0aHJlZSBtb3N0IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgaXRlbXMgZm9yIGVhY2ggb2Ygb3VyIHRocmVlIHByZWRpY3RvcnMgb2YgaW50ZXJlc3QgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpOgoKYGBge3IsIGluY2x1ZGUgPSBUfQpiaW5kX3Jvd3MoZF9leHBfYnlzaXRlX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigzLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgIGRfZXhwX2J5c2l0ZV9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCkpICU+JQogIGFycmFuZ2Uod2hpY2hfY29yLCBwN19jdHJ5LCBkZXNjKGFicyhjb3IpKSkgJT4lCiAgc2VsZWN0KHA3X2N0cnksIGNvciwgcXVlc3Rpb25fdGV4dCwgc2NhbGUpICU+JQogIHJlbmFtZShTaXRlID0gcDdfY3RyeSwgQ29ycmVsYXRpb24gPSBjb3IsIAogICAgICAgICBgUXVlc3Rpb24gdGV4dGAgPSBxdWVzdGlvbl90ZXh0LCBTY2FsZSA9IHNjYWxlKSAlPiUKICBrYWJsZShkaWdpdHMgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjIpICU+JQogIGdyb3VwX3Jvd3MoIkFic29ycHRpb24iLCAxLCAxNSkgJT4lCiAgZ3JvdXBfcm93cygiUG9yb3NpdHkgKER1bGluKSIsIDE2LCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiTWFydGhhIFN0b3J5IiwgMzEsIDQ1KQpgYGAKCkFuZCBoZXJlJ3MgYSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb3JyZWxhdGlvbnMgb2YgdGhlc2UgdGhyZWUgcHJlZGljdG9ycyB3aXRoIGFsbCAiZXhwZXJpZW5jZSIgaXRlbXMgaW4gdGhpcyBwYWNrZXQgKHNwaXJpdHVhbCBhbmQgc2VjdWxhcik6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDEuOCwgaW5jbHVkZSA9IFR9CmdncGxvdChkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDgwKSksCiAgICAgICBhZXMoeCA9IGNvciwgeSA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICBjb2xvciA9IHdoaWNoX2NvcikpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicyh4ID0gIlBlYXJzb24gY29ycmVsYXRpb24gKHRoZW9yZXRpY2FsIHJhbmdlOiAtMSB0byAxKSIsCiAgICAgICB5ID0gIlF1ZXN0aW9uIChieSBzY2FsZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5OiBnb29kIHZzLiBiYWQgZW1vdGlvbnMKCldoaWNoIGVtb3Rpb25zIHdlcmUgY29uc2lkZXJlZCBtb3N0ICJwb3RlbnQiIGluIG91ciBtZWFzdXJlcyBvZiBwb3Jvc2l0eT8KCiMjIyBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pCgpgYGB7cn0KZF9wb3IgPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfcG9yXyIpKSAlPiUKICBzZWxlY3QoLWMoZW5kc193aXRoKCJfY2F0IiksIGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUodmFsID0gY2FzZV93aGVuKHF1ZXN0aW9uICVpbiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoInA3X3Bvcl9qb2Iud2lzaCIsICJwN19wb3JfY29uc2x0LnVuc2VlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19wb3JfbWlyY2wucHJheWVyIiwgInA3X3Bvcl9wcnkuZGVhZC5iYWNrIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9mYWxsLmluLmxvdiIsICJwN19wb3JfdGhncy5oZWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfcG9yX3Zpc3VhbGl6YXRpb24iKSB+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24gJWluJSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYygicDdfcG9yX3RoZ3MuaHJ0IiwgInA3X3Bvcl93aWZpLnRoZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfcG9yX2FuZ3IuY250cmwiLCAicDdfcG9yX3NwcnQuZW52eSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19wb3JfcmVhZC50aGdzIiwgInA3X3Bvcl9zdHJlLnNwb2lsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9zcGtuLmN1cnNlIiwgInA3X3Bvcl9jdXJzZS5zaWNrIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9zcHJ0LnB1dC50aGdzIikgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgICAgICAgdmFsID0gZmFjdG9yKHZhbCwgbGV2ZWxzID0gYygibmVnYXRpdmUiLCAicG9zaXRpdmUiKSkpCgojIGNvbnRyYXN0cyhkX3BvciRwN19jdHJ5KSA8LSBjb250cmFzdHNfY3RyeV9lZmYKY29udHJhc3RzKGRfcG9yJHZhbCkgPC0gY2JpbmQoIl9uZWdfcG9zIiA9IGMoMCwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjcsIGluY2x1ZGUgPSBUfQpwb3JfdmFsX3Bsb3RfYSA8LSBkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHZhbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB2YWwsIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCB2YWwpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMiwgMC4yNSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIFBvcm9zaXR5IChEdWxpbikgcXVlc3Rpb25zIGJ5IHZhbGVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiXG5WYWxlbmNlIGNvZGVkIGJ5IFRNTFxuUmVzcG9uc2Ugb3B0aW9uczogMCA9IGl0IGRvZXMgbm90IGhhcHBlbiwgMSA9IGl0IG1pZ2h0IGhhcHBlbiwgMiA9IGl0IGRlZmluaXRlbHkgaGFwcGVuc1xuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlZhbGVuY2UiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCgpwb3JfdmFsX3Bsb3RfYiA8LSBkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHZhbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCB2YWwsIHZhbCkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IHZhbCwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBwN19jdHJ5LCBuY29sID0gNSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSA0LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAwLjEpKSArCiAgbGFicyh0aXRsZSA9ICJNZWFuIHJlc3BvbnNlcyB0byBQb3Jvc2l0eSAoRHVsaW4pIHF1ZXN0aW9ucyBieSB2YWxlbmNlIiwKICAgICAgIHN1YnRpdGxlID0gIlxuVmFsZW5jZSBjb2RlZCBieSBUTUxcblJlc3BvbnNlIG9wdGlvbnM6IDAgPSBpdCBkb2VzIG5vdCBoYXBwZW4sIDEgPSBpdCBtaWdodCBoYXBwZW4sIDIgPSBpdCBkZWZpbml0ZWx5IGhhcHBlbnNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJWYWxlbmNlIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKcGxvdF9ncmlkKHBvcl92YWxfcGxvdF9hLCBwb3JfdmFsX3Bsb3RfYiwgbmNvbCA9IDEpCmBgYAoKVGhlIGl0ZW1zIGNvZGVkIGJ5IFRNTCBhcyAibmVnYXRpdmUiIHNlZW0gdG8gaGF2ZSBlbGljaXRlZCBzb21ld2hhdCBzdHJvbmdlciBlbmRvcnNlbWVudHMgdGhhbiB0aGUgaXRlbXMgY29kZWQgYXMgInBvc2l0aXZlLCIgdGhvdWdoIHRoaXMgZGlmZmVyZW5jZSBhcHBlYXJzIHRvIGhhdmUgYmVlbiBxdWl0ZSBzbWFsbCAobWF5YmUgbiBvdCBzaWduaWZpY2FudCkgaW4gdGhlIFVTIGFuZCBDaGluYS4gCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CldoYXQgYWJvdXQgd2hlbiB3ZSBsb29rIGF0IGluZGl2aWR1YWwgcXVlc2l0b25zPwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQpkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChwYXN0ZTAodG91cHBlcih2YWwpLCAiOiAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0KSwgMzUpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCAKICAgICAgICAgICAgIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCguIH4gcXVlc3Rpb25fdGV4dCwgbmNvbCA9IDMpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJtZWFuX3Njb3JlIiwgbmEucm0gPSBUKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAwLjI1KSkgKwogIGxhYnModGl0bGUgPSAiTWVhbiByZXNwb25zZXMgdG8gUG9yb3NpdHkgKER1bGluKSBxdWVzdGlvbnMgYnkgdmFsZW5jZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJcblZhbGVuY2UgY29kZWQgYnkgVE1MXG5SZXNwb25zZSBvcHRpb25zOiAwID0gaXQgZG9lcyBub3QgaGFwcGVuLCAxID0gaXQgbWlnaHQgaGFwcGVuLCAyID0gaXQgZGVmaW5pdGVseSBoYXBwZW5zXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlIikKYGBgCgpJJ20gbm90IGdvaW5nIHRvIGNvbW1lbnQgb24gdGhpcyBhdCB0aGUgbW9tZW50LiAoQnV0IG5vdGUgdGhhdCBUaGFpbGFuZCB3YXMgbWlzc2luZyBxdWVzdGlvbiAjMTMgaW4gdGhpcyBzY2FsZSAtIHRocm91Z2hvdXQgdGhpcyBkb2N1bWVudCwgc2NvcmVzIGZvciBUaGFpbGFuZCBoYXZlIGJlZW4gYWRqdXN0ZWQgYWNjb3JkaW5nbHkgc28gdGhhdCBUaGFpIHBhcnRpY2lwYW50cyBkbyBub3QgaGF2ZSBhcnRpZmljYWxseSBkZWZsYXRlZCBQb3Jvc2l0eSBzY29yZXMhKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDIuMiwgaW5jbHVkZSA9IFR9CmRfcG9yICU+JSAKICBmaWx0ZXIoIWlzLm5hKHZhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgcXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShtZWFuX3Njb3JlID0gbWVhbihyZXNwb25zZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc3VtX3Njb3JlID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbGVmdF9qb2luKHZhcl9rZXkgJT4lIHNlbGVjdChxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpKSAlPiUKICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHBhc3RlMCh0b3VwcGVyKHZhbCksICI6ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQpLCAzNSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCAKICAgICAgICAgICAgIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCguIH4gcXVlc3Rpb25fdGV4dCwgbmNvbCA9IDMsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDIsIDAuMSkpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlxuVmFsZW5jZSBjb2RlZCBieSBUTUxcblJlc3BvbnNlIG9wdGlvbnM6IDAgPSBpdCBkb2VzIG5vdCBoYXBwZW4sIDEgPSBpdCBtaWdodCBoYXBwZW4sIDIgPSBpdCBkZWZpbml0ZWx5IGhhcHBlbnNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJTaXRlIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIE1hcnRoYSBzdG9yeQoKYGBge3J9CmRfbW0gPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfbW1fIikpICU+JQogIHNlbGVjdCgtYyhlbmRzX3dpdGgoIl9jYXQiKSwgY29udGFpbnMoInRvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShlbW8gPSBjYXNlX3doZW4oZ3JlcGwoIl9hbmdfIiwgcXVlc3Rpb24pIH4gImFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJfY2FyXyIsIHF1ZXN0aW9uKSB+ICJjYXJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl9lbnZfIiwgcXVlc3Rpb24pIH4gImVudnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICB2YWwgPSBjYXNlX3doZW4oZW1vICVpbiUgYygiYW5nZXIiLCAiZW52eSIpIH4gIm5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVtbyA9PSAiY2FyaW5nIiB+ICJwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICAgICAgIGVtbyA9IGZhY3RvcihlbW8sIGxldmVscyA9IGMoImFuZ2VyIiwgImVudnkiLCAiY2FyaW5nIikpLAogICAgICAgICB2YWwgPSBmYWN0b3IodmFsLCBsZXZlbHMgPSBjKCJuZWdhdGl2ZSIsICJwb3NpdGl2ZSIpKSkKCiMgY29udHJhc3RzKGRfbW0kcDdfY3RyeSkgPC0gY29udHJhc3RzX2N0cnlfZWZmCmNvbnRyYXN0cyhkX21tJGVtbykgPC0gY2JpbmQoIl9uZWdfcG9zIiA9IGMoMSwgMSwgLTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfZW52X2FuZyIgPSBjKC0xLCAxLCAwKSkKY29udHJhc3RzKGRfbW0kdmFsKSA8LSBjYmluZCgiX25lZ19wb3MiID0gYygwLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNywgaW5jbHVkZSA9IFR9Cm1tX2Vtb19wbG90X2EgPC0gZF9tbSAlPiUgCiAgZmlsdGVyKCFpcy5uYShlbW8pKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIGVtbykgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCBlbW8pICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMywgMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgZW1vdGlvbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJFbW90aW9uIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKbW1fZW1vX3Bsb3RfYiA8LSBkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgZW1vKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJtZWFuX3Njb3JlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZW1vLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+IHA3X2N0cnksIG5jb2wgPSA1LCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDQsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDAuMjUpKSArCiAgbGFicyh0aXRsZSA9ICIoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJFbW90aW9uIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKcGxvdF9ncmlkKG1tX2Vtb19wbG90X2EsIG1tX2Vtb19wbG90X2IsIG5jb2wgPSAxKQpgYGAKClRvIG15IGV5ZXMsIHRoZXJlIGlzIG5vIHNpbmdsZSBwYXR0ZXJuIGhlcmU6IEluIHRoZSBVUyBhbmQgQ2hpbmEsIGNhcmluZyBzZWVtcyB0byBoYXZlIGVsaWNpdGVkIHN0cm9uZ2VyIHJlc3BvbnNlcyB0aGFuIHRoZSBvdGhlciBlbW90aW9uczsgaW4gVmFudWF0dSBhbmQgcG9zc2libHkgVGhhaWxhbmQsIGFuZ2VyIHNlZW1zIHRvIGhhdmUgZWxpY3RlZCBzdHJvbmdlciByZXNwb25zZXM7IGluIEdoYW5hLCB0aGUgdGhyZWUgZW1vdGlvbnMgc2VlbSB0byBoYXZlIGVsaWNpdGVkIHJvdWdobHkgc2ltaWxhciByZXNwb25zZXMuCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CldoYXQgYWJvdXQgd2hlbiB3ZSBsb29rIGF0IGluZGl2aWR1YWwgcXVlc2l0b25zPwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjIsIGluY2x1ZGUgPSBUfQpkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vLCBxdWVzdGlvbikgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSAlPiUgc2VsZWN0KHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0LCBvcmRlcikpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNDApLAogICAgICAgICBxdWVzdGlvbl90eXBlID0gY2FzZV93aGVuKAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX2ZlZWwuaHVydCIsICJwN19tbV9jYXJfZmVsLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9mZWVsLmh1cnQiKSB+IAogICAgICAgICAgICAgImEuIGh1cnQvaGVscCB3aXRoIGZlZWxpbmdzIiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ190aGdzLmh1cnQiLCAicDdfbW1fY2FyX3Roay5uby5wciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfdGhncy5odXJ0IikgfiAKICAgICAgICAgICAgICJiLiBodXJ0L2hlbHAgd2l0aCBqdXN0IHRob3VnaHRzIiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19zcHJ0Lmh1cnQiLCAicDdfbW1fY2FyX3NwcnQuaGVscCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc3BydC5odXJ0IikgfiAKICAgICAgICAgICAgICJjLiBodXJ0L2hlbHAgdmlhIHNwaXJpdCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfcGh5c2ljYWwiLCAicDdfbW1fY2FyX3BoeXNpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9waHlzaWNhbCIpIH4gCiAgICAgICAgICAgICAiZC4gcGh5c2ljYWxseSBzaWNrL3dlbGwiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NpY2tuZXNzIiwgInA3X21tX2Nhcl9jdXJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3NpY2tuZXNzIikgfiAKICAgICAgICAgICAgICJlLiBjYXVzZSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIAogICAgICAgICAgICAgeSA9IG1lYW5fc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSB+IHA3X2N0cnkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIGVtbywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdHlwZSwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDEpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgaXRlbSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJRdWVzdGlvbiB0eXBlIiwKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDEuMiwgaW5jbHVkZSA9IFR9CmRfbW0gJT4lIAogIGZpbHRlcighaXMubmEoZW1vKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaiwgdmFsLCBlbW8sIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA0MCksCiAgICAgICAgIHF1ZXN0aW9uX3R5cGUgPSBjYXNlX3doZW4oCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfZmVlbC5odXJ0IiwgInA3X21tX2Nhcl9mZWwubm8ucHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X2ZlZWwuaHVydCIpIH4gCiAgICAgICAgICAgICAiYS4gaHVydC9oZWxwIHdpdGggZmVlbGluZ3MiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3RoZ3MuaHVydCIsICJwN19tbV9jYXJfdGhrLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl90aGdzLmh1cnQiKSB+IAogICAgICAgICAgICAgImIuIGh1cnQvaGVscCB3aXRoIGp1c3QgdGhvdWdodHMiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NwcnQuaHVydCIsICJwN19tbV9jYXJfc3BydC5oZWxwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9zcHJ0Lmh1cnQiKSB+IAogICAgICAgICAgICAgImMuIGh1cnQvaGVscCB2aWEgc3Bpcml0IiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19waHlzaWNhbCIsICJwN19tbV9jYXJfcGh5c2ljYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3BoeXNpY2FsIikgfiAKICAgICAgICAgICAgICJkLiBwaHlzaWNhbGx5IHNpY2svd2VsbCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfc2lja25lc3MiLCAicDdfbW1fY2FyX2N1cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc2lja25lc3MiKSB+IAogICAgICAgICAgICAgImUuIGNhdXNlIikpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgZW1vLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90eXBlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IGVtbywgY29sb3IgPSBwN19jdHJ5LCBzaGFwZSA9IGVtbykpICsKICBmYWNldF9ncmlkKHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDAuNSkpICsKICB0aGVtZSgjYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlJlc3BvbnNlIG9wdGlvbnM6IDAgPSBuZXZlciwgMSA9IHJhcmVseSwgMiA9IG9mdGVuLCAzID0gdmVyeSBvZnRlblxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlF1ZXN0aW9uIHR5cGUiLAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlIiwgCiAgICAgICBzaGFwZSA9ICJFbW90aW9uIikKYGBgCgpUaGlzIGNvbXBsaWNhdGVzIChhbmQgdG8gbXkgbWluZCwgY2xhcmlmaWVzKSB0aGUgcGljdHVyZSBzb21ld2hhdC4gSGVyZSBhcmUgYSBmZXcgb2JzZXJ2YXRpb25zOgoKLSBJbiBzb21lIHNpdGVzIHBhcnRpY2lwYW50cyB3ZXJlIHByZXR0eSBjb25zaXN0ZW50IGFjcm9zcyBxdWVzdGlvbnMgaW4gdGVybXMgb2YgdGhlICJvcmRlcmluZyIgb2YgZW1vdGlvbnM6IGUuZy4uLi4KICAgIC0gSW4gdGhlIFVTIChsZWZ0bW9zdCBjb2x1bW4pLCBjYXJpbmcgd2FzIHZpcnR1YWxseSBhbHdheXMgbW9zdCBwb3RlbnQKICAgIC0gSW4gQ2hpbmEgKGZvdXJ0aCBjb2x1bW4gZnJvbSBsZWZ0KSwgY2FyaW5nIHdhcyBhbG1vc3QgYWx3YXlzIG1vc3QgcG90ZW50LCB3aXRoIHRoZSBtYWpvciBleGNlcHRpb24gb2YgcXVlc3Rpb24gImQiICh3aGV0aGVyIHRoZSBlbW90aW9uIGNvdWxkIG1ha2UgdGhlIGVtb3RlciBzaWNrL3dlbGwpCiAgICAtIEluIFZhbnVhdHUgKHJpZ2h0bW9zdCBjb2x1bW4pIGFuZ2VyIHdhcyBhbG1vc3QgYWx3YXlzIG1vc3QgcG90ZW50ICh3aXRoIHRoZSBtYWpvciBleGNlcHRpb24gb2YgcXVlc3Rpb24gImMiICh3aGV0aGVyIGEgc3Bpcml0IGNvdWxkIHVzZSB0aGUgZW1vdGlvbiB0byBodXJ0L2hlbHApCi0gSW4gb3RoZXIgc2l0ZXMgcGFydGljaXBhbnRzIGRpZmZlcmVudGlhdGVkIG1vcmUgYmV0d2VlbiBkaWZmZXJlbnQga2luZHMgb2YgcXVlc3Rpb25zOiBlLmcuLi4uIAogICAgLSBJbiBUaGFpbGFuZCwgKG1pZGRsZSBjb2x1bW4pIGFuZ2VyIHdhcyBtb3JlIHBvdGVudCBmb3IgcXVlc3Rpb25zICJiIiBhbmQgImQsIiB3aGlsZSBjYXJpbmcgd2FzIGNsZWFybHkgbW9yZSBwb3RlbnQgZm9yIHF1ZXN0aW9uICJlIgotIFNvbWUgcXVlc3Rpb25zIGVsaWNpdGVkIHNpbWlsYXIgIm9yZGVyaW5ncyIgb2YgZW1vdGlvbnMgYWNyb3NzIHNpdGVzOiBlLmcuLi4uCiAgICAtIEZvciBxdWVzdGlvbiAiYyIgKHdoZXRoZXIgYSBzcGlyaXQgY291bGQgdXNlIHRoZSBlbW90aW9uIHRvIGh1cnQvaGVscCksIHdoZW4gc2l0ZXMgZGlmZmVyZW50aWF0ZWQgYWNyb3NzIGVtb3Rpb25zLCBpdCB0ZW5kZWQgdG8gYmUgaW4gdGhlIGRpcmVjdGlvbiBvZiBjYXJpbmcgYmVpbmcgbW9zdCBwb3RlbnQgKGJ1dCBwZW9wbGUgZGlkbid0IHJlYWxseSBkaWZmZXJlbnRpYXRlIGluIEdoYW5hIG9yIFRoYWlsYW5kKQogICAgLSBGb3IgcXVlc3Rpb24gImQiICh3aGV0aGVyIHRoZSBlbW90aW9uIGNvdWxkIG1ha2UgdGhlIGVtb3RlciBzaWNrL3dlbGwpLCB3aGVuIHNpdGVzIGRpZmZlcmVudGlhdGVkIGFjcm9zcyBlbW90aW9ucywgaXQgdGVuZGVkIHRvIGJlIGluIHRoZSBkaXJlY3Rpb24gb2YgYW5nZXIgYmVpbmcgbW9zdCBwb3RlbnQgKGJ1dCBwZW9wbGUgZGlkbid0IHJlYWxseSBkaWZmZXJlbnRpYXRlIGluIHRoZSBVUykKICAgIC0gRm9yIHF1ZXN0aW9uICJlIiAod2hldGhlciwgaWYgdGhlIG90aGVyIHBlcnNvbiBnb3Qgc2ljay93ZWxsLCB0aGUgZW1vdGVyJ3MgZW1vdGlvbiBjb3VsZCBiZSB0aGUgY2F1c2UpLCB3aGVuIHNpdGVzIGRpZmZlcmVudGlhdGVkIGFjcm9zcyBlbW90aW9ucywgaXQgdGVuZGVkIHRvIGJlIGluIHRoZSBkaXJlY3Rpb24gb2YgY2FyaW5nIGJlaW5nIG1vc3QgcG90ZW50IChidXQgcGVvcGxlIGRpZG4ndCByZWFsbHkgZGlmZmVyZW50aWF0ZSBpbiBWYW51YXR1KQotIE90aGVyIHF1ZXN0aW9ucyBlbGljaXRlZCBkaWZmZXJlbnQgIm9yZGVyaW5ncyIgb2YgZW1vdGlvbnMgYWNyb3NzIHNpdGVzIChxdWVzaXRvbiAiYSwiIHdoZXRoZXIgdGhlIGVtb3RlciBjb3VsZCBodXJ0L2hlbHAgdGhlIG90aGVyIHdpdGggdGhlaXIgZW1vdGlvbjsgYW5kIHF1ZXN0aW9uICJiLCIgd2hldGhlciB0aGUgZW1vdGVyIGNvdWxkIGh1cnQvaGVscCB0aGUgb3RoZXIganVzdCBieSB0aGlua2luZyBlbW90aW9uYWwgdGhvdWdodHMpCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBTaXRlIGRpZmZlcmVuY2VzIGluICJjb250cm9sIiBzY2FsZXMKCmBgYHtyfQpjdGxfcGxvdF9hIDwtIGRfY3RsX25vcmV2ICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIk5lZWQgZm9yIENvZ25pdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIlNlbnNlIG9mIENvbnRyb2wiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlX25vcmV2LCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IC4pICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgaGVpZ2h0ID0gMC4xLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInNjb3JlX25vcmV2IiwgbmEucm0gPSBUKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRiwgZmF0dGVuID0gMikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2l0ZSBkaWZmZXJlbmNlcyBpbiAnY29udHJvbCcgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IE9taXR0aW5nIHJldmVyc2UtY29kZWQgaXRlbXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUgKG5vIHJldmVyc2UtY29kZWQgaXRlbXMpIikKCmN0bF9wbG90X2IgPC0gZF9jdGxfbm9yZXYgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiTmVlZCBmb3IgQ29nbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiU2Vuc2Ugb2YgQ29udHJvbCIpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmVfbm9yZXYiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gc2NvcmVfbm9yZXYsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gLikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiTk9URTogT21pdHRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtc1xuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAobm8gcmV2ZXJzZS1jb2RlZCBpdGVtcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC44LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGN0bF9wbG90X2EsIGN0bF9wbG90X2IsIG5jb2wgPSAyKQpgYGAKCmBgYHtyfQojIGN0bF9wbG90X2MgPC0gZF9jdGwgJT4lCiMgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiMgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIk5lZWQgZm9yIENvZ25pdGlvbiIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiU2Vuc2Ugb2YgQ29udHJvbCIpKSAlPiUKIyAgIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwojICAgZmFjZXRfZ3JpZChzY2FsZSB+IC4pICsKIyAgIGdlb21faml0dGVyKGFscGhhID0gMC4yLCBoZWlnaHQgPSAwLjEsIHNob3cubGVnZW5kID0gRikgKwojICAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JQojICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQojICAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiLCBuYS5ybSA9IFQpICU+JQojICAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAojICAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAojICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGLCBmYXR0ZW4gPSAyKSArCiMgICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKIyAgIGxhYnModGl0bGUgPSAiU2l0ZSBkaWZmZXJlbmNlcyBpbiAnY29udHJvbCcgc2NhbGVzIiwKIyAgICAgICAgc3VidGl0bGUgPSAiTk9URTogSW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKIyAgICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAoaW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIikKIyAKIyBjdGxfcGxvdF9kIDwtIGRfY3RsICU+JQojICAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAojICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJOZWVkIGZvciBDb2duaXRpb24iLAojICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIlNlbnNlIG9mIENvbnRyb2wiKSkgJT4lCiMgICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiMgICBtdWx0aV9ib290X3N0YW5kYXJkKCJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiMgICB1bmdyb3VwKCkgJT4lCiMgICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKIyAgIGZhY2V0X2dyaWQoc2NhbGUgfiAuKSArCiMgICBnZW9tX3BvaW50cmFuZ2UoYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAojICAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwojICAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiMgICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKIyAgICAgICAgc3VidGl0bGUgPSAiTk9URTogSW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIiwKIyAgICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSAoaW5jbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CiMgcGxvdF9ncmlkKGN0bF9wbG90X2MsIGN0bF9wbG90X2QsIG5jb2wgPSAyKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBPdmVyYWxsIHNjb3JlcwoKYGBge3J9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKZF9wYXNzX21iIDwtIGQgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUgCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnNjb3Jlc19wbG90X3Bhc3NfYSA8LSBkICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAuMiwgd2lkdGggPSAwLjQsIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGRfcGFzc19tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4bHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpzY29yZXNfcGxvdF9wYXNzX2IgPC0gZF9wYXNzX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXhsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMi4yLCBpbmNsdWRlID0gVH0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpwbG90X2dyaWQoc2NvcmVzX3Bsb3RfcGFzc19hLCBzY29yZXNfcGxvdF9wYXNzX2IsIG5jb2wgPSAxKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCmRfYWxsX21iIDwtIGQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lIAogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIpICU+JSAKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwpzY29yZXNfcGxvdF9hbGxfYSA8LSBkMCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofnNjYWxlLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLjIsIHdpZHRoID0gMC40LCBhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX2FsbF9tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnNjb3Jlc19wbG90X2FsbF9iIDwtIGRfYWxsX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMsIGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnBsb3RfZ3JpZChzY29yZXNfcGxvdF9hbGxfYSwgc2NvcmVzX3Bsb3RfYWxsX2IsIG5jb2wgPSAxKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgSGlzdG9ncmFtcyBmb3IgZWFjaCBzY2FsZQoKIyMgQWJzb3JwdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzMiwgMTYpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gYWJzb3JwdGlvbiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTMyKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZHNlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19kc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDM1LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcwLCAzNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03MCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19kc2VfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RzZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMzUsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNzAsIDM1KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gRFNFIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNzApIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBTcGlyaXR1YWwgZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3NlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gNDgsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOTYsIDI0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC05NikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19zZV9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3NlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19zZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDQ4LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDk2LCAyNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBTRSBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTk2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgV2F5cyBvZiBiZWluZwoKIyMjIEFsbCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3dvYl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfd29iX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zNiwgMzYsIDE4KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM2IHRvIDM2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfd29iX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN193b2JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM2LCAzNiwgMTgpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zNiB0byAzNikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgojIyMgRXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoIl93b2JfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSwgY29udGFpbnMoInJldmVyc2UiKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yOCwgMjgsIDE0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkX2N0bF9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gIndvYiIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMCwgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMjgsIDI4LCAxNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiV2F5cyBvZiBiZWluZyAoZXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgVW5jb21tb24gZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfdW5ldl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfdW5ldl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSA5LCB5ID0gMC4yMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE4LCA5KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJVbmNvbW1vbiBldmVudHMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTE4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3VuZXZfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN191bmV2X3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN191bmV2X3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDksIHkgPSAwLjIwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTgsIDkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlVuY29tbW9uIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBVTkVWIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMTgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBFeHRyYXNlbnNvcnkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZXhzZW5fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjMwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNywgMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRXh0cmFzZW5zb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2V4c2VuX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZXhzZW5fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2V4c2VuX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZXhzZW5fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4zMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcsIDEpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkV4dHJhc2Vuc29yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBFWFNFTiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIYXJkIHRoaW5raW5nCgojIyMgQWxsIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfaHRoa190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfaHRoa190b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM4LCAzOCwgMTkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzggdG8gMzgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19odGhrX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19odGhrX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzgsIDM4LCAxOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM4IHRvIDM4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCiMjIyBFeGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX2h0aGtfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogICAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgICAgcDdfaHRoa19ocmQuaGF2LnRvLCBwN19odGhrX3NtYWwuZGFpbHksIHA3X2h0aGtfbGlsLnRob3VnaHQsCiAgICAgICAgICAgICAgcDdfaHRoa19ub3QuZXhjaXRpbmcsIHA3X2h0aGtfbWVudGFsLmVmZnJ0LCAKICAgICAgICAgICAgICBwN19odGhrX2pvYi5kb25lKSkgJT4lIAogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTIwLCAyMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmRfY3RsX25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiaHRoayIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yMCwgMjAsIDEwKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkIHRoaW5raW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19wb3JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMyLCAxNikpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUG9yb3NpdHkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTMyKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3Bvcl9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfcG9yX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzMiwgMTYpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFBPUiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTMyKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgTWFydGhhIHN0b3J5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTU0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X21tX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gTU0gc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC01NCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFJlbGlhYmlsaXR5CgpgYGB7cn0KYWxwaGFfYnlfY3RyeV9mdW4gPC0gZnVuY3Rpb24oZGYpewogIAogIGRmIDwtIGRmICU+JSAKICAgIHNlbGVjdCgtZW5kc193aXRoKCJfY2F0IiksIC1jb250YWlucygidG90YWwiKSwgLWNvbnRhaW5zKCdjaGVjaycpKQogIAogIGFscGhhX2Z1biA8LSBmdW5jdGlvbihkZil7CiAgICBhbHBoYV9kZiA8LSBwc3ljaDo6YWxwaGEoZGYpCiAgICByYXdfYWxwaGEgPC0gYWxwaGFfZGYkdG90YWxbMV1bXSAlPiUgYXMubnVtZXJpYygpCiAgICByZXR1cm4ocmF3X2FscGhhKQogIH0KICAKICBhIDwtIGMoCiAgICBhbHBoYV91cyA9IGFscGhhX2Z1bihkZiAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLXA3X2N0cnkpKSwKICAgIGFscGhhX2doID0gYWxwaGFfZnVuKGRmICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1wN19jdHJ5KSksCiAgICBhbHBoYV90aCA9IGFscGhhX2Z1bihkZiAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtcDdfY3RyeSkpLAogICAgYWxwaGFfY2ggPSBhbHBoYV9mdW4oZGYgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLXA3X2N0cnkpKSwKICAgIGFscGhhX3Z0ID0gYWxwaGFfZnVuKGRmICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLXA3X2N0cnkpKSwKICAgIGFscGhhX2FsbCA9IGFscGhhX2Z1bihkZiAlPiUgc2VsZWN0KC1wN19jdHJ5KSkpCiAgCiAgcmV0dXJuKGEpCn0KYGBgCgpgYGB7cn0KZF9hbHBoYSA8LSBkYXRhLmZyYW1lKAogIGBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXNgID0gYWxwaGFfYnlfY3RyeV9mdW4oCiAgICBkMCAlPiUgc2VsZWN0KHA3X2N0cnksIGNvbnRhaW5zKCJfZHNlIikpKSwKICBgU3Bpcml0dWFsIEV2ZW50c2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9zZSIpKSAlPiUgcmVtb3ZlX21pc3NpbmcoKSksCiAgYFVuY29tbW9uIEV2ZW50c2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl91bmV2IikpKSwKICBgRXh0cmFzZW5zb3J5YCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX2V4c2VuIikpKSwKICBgQWJzb3JwdGlvbmAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9hYnMiKSkpLAogIGBQb3Jvc2l0eSAoRHVsaW4pYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX3BvciIpKSksCiAgYE1hcnRoYSBTdG9yeWAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9tbSIpKSksCiAgYFdheXMgb2YgYmVpbmdgID0gYWxwaGFfYnlfY3RyeV9mdW4oCiAgICBkMCAlPiUgc2VsZWN0KHA3X2N0cnksIGNvbnRhaW5zKCJfd29iIikpKSwKICBgSGFyZCB0aGlua2luZ2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9odGhrIikpKSwKICBgV2F5cyBvZiBiZWluZyAobm8gcmV2KWAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl93b2IiKSwgLWNvbnRhaW5zKCJyZXZlcnNlIikpKSwKICBgSGFyZCB0aGlua2luZyAobm8gcmV2KWAgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9odGhrIiksIAogICAgICAgICAgICAgICAgICAtYygicDdfaHRoa19ub3QuZnVuIiwgInA3X2h0aGtfbGlsLmNoYWxsZW5nIiwgCiAgICAgICAgICAgICAgICAgICAgICJwN19odGhrX2F2b2lkLnRoaW5rIiwgInA3X2h0aGtfaHJkLmhhdi50byIsIAogICAgICAgICAgICAgICAgICAgICAicDdfaHRoa19zbWFsLmRhaWx5IiwgInA3X2h0aGtfbGlsLnRob3VnaHQiLAogICAgICAgICAgICAgICAgICAgICAicDdfaHRoa19ub3QuZXhjaXRpbmciLCAicDdfaHRoa19tZW50YWwuZWZmcnQiLAogICAgICAgICAgICAgICAgICAgICAicDdfaHRoa19qb2IuZG9uZSIpKSkpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic2FtcGxlIikgJT4lCiAgZ2F0aGVyKHNjYWxlLCByYXdfYWxwaGEsIC1zYW1wbGUpICU+JQogIG11dGF0ZShzYW1wbGUgPSAKICAgICAgICAgICByZWNvZGVfZmFjdG9yKGdzdWIoImFscGhhXyIsICIiLCBzYW1wbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgInVzIiA9ICJVUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZ2giID0gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ0aCIgPSAiVGhhaWxhbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgImNoIiA9ICJDaGluYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAidnQiID0gIlZhbnVhdHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIgPSAiT1ZFUkFMTCIpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIlxcLlxcLiQiLCAiKSIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJcXC5cXC4iLCAiICgiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXFwuJCIsICIpIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIlxcLiIsICIgIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmNvbW1vbiBFdmVudHMiLCAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWJzb3JwdGlvbiIsICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFydGhhIFN0b3J5IiwgIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXlzIG9mIGJlaW5nIChubyByZXYpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFyZCB0aGlua2luZyIsICJIYXJkIHRoaW5raW5nIChubyByZXYpIikpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZF9hbHBoYSAlPiUKICBtdXRhdGUoc2NvcGUgPSBpZmVsc2Uoc2FtcGxlID09ICJPVkVSQUxMIiwgInNpdGUiLCAib3ZlcmFsbCIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzYW1wbGUsIHkgPSByYXdfYWxwaGEsICBjb2xvciA9IHNhbXBsZSwgCiAgICAgICAgICAgICBzaGFwZSA9IHNjb3BlLCBzaXplID0gc2NvcGUpKSArCiAgZmFjZXRfd3JhcCh+IHNjYWxlLCBuY29sID0gNikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuOCwgbHR5ID0gMikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNywgbHR5ID0gMiwgY29sb3IgPSAiZ3JheSIpICsKICBnZW9tX3BvaW50KHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoMiwgNCkpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNiwgMTgpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSkpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlJlbGlhYmlsaXR5IGJ5IHNpdGUgYW5kIG92ZXJhbGwiLAogICAgICAgc3VidGl0bGUgPSAiQ3JvbmJhY2gncyBhbHBoYSA9IDAuOCAoYmxhY2sgZG90dGVkIGxpbmUpIGlzIGEgY2xhc3NpYyBjdXRvZmYgZm9yICd2ZXJ5IGdvb2QnIHJlbGlhYmlsaXR5O1xuaW4gcHJhY3RpY2UsIGFscGhhIDwgMC43IChncmF5IGRvdHRlZCBsaW5lKSBpcyBvZnRlbiBjb25zaWRlcmVkIHByb2JsZW1hdGljIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiQ3JvbmJhY2gncyBhbHBoYSAocmFuZ2U6IDAtMSkiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgQ29ycmVsYXRpb25zCgpgYGB7cn0KIyBGSVJTVCBUV08gQVJFIEVRVUlWQUxFTlQhCgojIHJlc19jb3IgPC0gZDAgJT4lCiMgICBzZWxlY3QoY29udGFpbnMoInRvdGFsIikpICU+JQojICAgcmVuYW1lX2FsbChmdW5zKGdzdWIoInA3XyIsICIiLCAuKSkpICU+JQojICAgcmVuYW1lX2FsbChmdW5zKGdzdWIoIl90b3RhbCIsICIiLCAuKSkpICU+JQojICAgY29yLmNpKHBsb3QgPSBGKQoKcmVzX2NvciA8LSBkX3N0ZCAlPiUKICBzZWxlY3QoLWNvbnRhaW5zKCJwN18iKSkgJT4lCiAgY29yLmNpKHBsb3QgPSBGKQoKIyByZXNfY29yIDwtIGRfc3RkX2J5c2l0ZSAlPiUKIyAgIHNlbGVjdCgtY29udGFpbnMoInA3XyIpKSAlPiUKIyAgIGNvci5jaShwbG90ID0gRikKCmRfY29yIDwtIHJlc19jb3IkcmhvICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInYxIikgJT4lCiAgZ2F0aGVyKHYyLCByLCAtdjEpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGVfYXQodmFycyh2MSwgdjIpLCAKICAgICAgICAgICAgZnVucyhyZWNvZGVfZmFjdG9yKC4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIFN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgQmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciKSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX2NvciAlPiUKICBnZ3Bsb3QoYWVzKHggPSB2MSwgeSA9IHYyLCBmaWxsID0gciwKICAgICAgICAgICAgIGxhYmVsID0gZm9ybWF0KHJvdW5kKHIsIDIpLCBuc21hbGwgPSAyKSkpICsKICBnZW9tX3RpbGUoKSArCiAgZ2VvbV90ZXh0KCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcigiUGVhcnNvbidzIHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDEpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpICsKICBsYWJzKHRpdGxlID0gIkNvcnJlbGF0aW9ucyBiZXR3ZWVuIG1lYXN1cmVzIGluY2x1ZGVkIGluIFBhY2tldCA3IikgIywKICAgICAgICMgc3VidGl0bGUgPSAiQWZ0ZXIgc3RhbmRhcmRpemluZyBlYWNoIG1lYXN1cmUgd2l0aGluIHNpdGUiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgRGVtb2dyYXBoaWNzCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJBbGwgcGFydGljaXBhbnRzIikKZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX3NleCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgY291bnQocDdfZGVtX3NleCkgJT4lCiAgbXV0YXRlKHByb3AgPSByb3VuZChuL3N1bShuKSwgMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChwN19kZW1fc2V4LCBwcm9wKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fc2V4KSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBjb3VudChwN19kZW1fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHA3X2RlbV9zZXgsIHByb3ApCmBgYAoKSW1wb3J0YW50IHRvIG5vdGUgdGhhdCBhIF92ZXJ5XyBzdWJzdGFudGlhbCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVGhhaWxhbmQgd2VyZSBmZW1hbGUsIGFuZCBhIHNsaWdodCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVmFudWF0dSB3ZXJlIGZlbWFsZS4KCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCgo=